簡単なショッピングカートみたいなものを制作しようとしているのですが、思い通りに行きません。
対応策をご存じの方がいらしたら宜しくお願いします。
1.list.phpからカートに入れたい物のナンバーをpostで送信
2.cart.phpで受け取ったデータをsetcookie関数で格納と同時にカートに入れたリストを表示。
問題は、2のリストを表示するところでブラウザで再読み込み(リロード)をしないとカートに入れたデータが更新されません。
この説明で、お分かりになる人がいらしたら回答お待ちしております。
1.list.phpからカートに入れたい物のナンバーをpostで送信した段階で、物品ナンバーのリストはcookieに持たせず、サーバ側に持たせておきsession IDとリンクさせるのが定石です。
cookieに持たせると詐称できてしまうからです。
2.cart.phpがsession IDを維持して、サーバ側に物品ナンバーを要求すればいいです。
PHP:セッションIDの受渡し
http://php.net/manual/ja/session.idpassing.php
(原因)http通信の仕様です。
ブラウザがsetcookieを受け取るタイミングは遷移の初期段階なので、
遷移無くしてphpからのクッキー更新は出来ないのです。
(対処例1)javascriptでクッキー更新を行う
document.cookie に対して書き込みを行えば新しい値を追加できますが、
サーバーへの書き込みと二重に処理を行うことになりますので、
サーバーとのやりとり中や、サーバーでの処理中にトラブルが発生すると、
データの整合性が崩れて受注トラブルになる場合もあります。
(対処例2)同期通信でクッキー更新を行う。
非同期でcart.phpにデータ送信するのではなく、
通常のページ遷移の形でcart.phpにPOSTするのが簡単で確実な方法となります。
大手通販サイトでも確認ページに遷移させるところが多いのは、
トラブル防止策の一つだったりするということです。