javascriptのクッキーについて質問です。

簡単なショッピングカートみたいなものを制作しようとしているのですが、思い通りに行きません。
対応策をご存じの方がいらしたら宜しくお願いします。

1.list.phpからカートに入れたい物のナンバーをpostで送信
2.cart.phpで受け取ったデータをsetcookie関数で格納と同時にカートに入れたリストを表示。

問題は、2のリストを表示するところでブラウザで再読み込み(リロード)をしないとカートに入れたデータが更新されません。
この説明で、お分かりになる人がいらしたら回答お待ちしております。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/08/14 10:59:27
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:dawakaki No.2

回答回数797ベストアンサー獲得回数122

ポイント50pt

1.list.phpからカートに入れたい物のナンバーをpostで送信した段階で、物品ナンバーのリストはcookieに持たせず、サーバ側に持たせておきsession IDとリンクさせるのが定石です。
cookieに持たせると詐称できてしまうからです。

2.cart.phpがsession IDを維持して、サーバ側に物品ナンバーを要求すればいいです。

PHP:セッションIDの受渡し
http://php.net/manual/ja/session.idpassing.php

その他の回答1件)

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

ポイント50pt

(原因)http通信の仕様です。
ブラウザがsetcookieを受け取るタイミングは遷移の初期段階なので、
遷移無くしてphpからのクッキー更新は出来ないのです。

(対処例1)javascriptでクッキー更新を行う
document.cookie に対して書き込みを行えば新しい値を追加できますが、
サーバーへの書き込みと二重に処理を行うことになりますので、
サーバーとのやりとり中や、サーバーでの処理中にトラブルが発生すると、
データの整合性が崩れて受注トラブルになる場合もあります。

(対処例2)同期通信でクッキー更新を行う。
非同期でcart.phpにデータ送信するのではなく、
通常のページ遷移の形でcart.phpにPOSTするのが簡単で確実な方法となります。

大手通販サイトでも確認ページに遷移させるところが多いのは、
トラブル防止策の一つだったりするということです。

id:dawakaki No.2

回答回数797ベストアンサー獲得回数122ここでベストアンサー

ポイント50pt

1.list.phpからカートに入れたい物のナンバーをpostで送信した段階で、物品ナンバーのリストはcookieに持たせず、サーバ側に持たせておきsession IDとリンクさせるのが定石です。
cookieに持たせると詐称できてしまうからです。

2.cart.phpがsession IDを維持して、サーバ側に物品ナンバーを要求すればいいです。

PHP:セッションIDの受渡し
http://php.net/manual/ja/session.idpassing.php

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません