カレッヂ |
質問者 ayano
投稿日 12/15(土) 16:13:47
ショッピングバスケットのバージョン6を使わせて頂こうと思い、 中のコードを読んでいると、ブラウザにセットするクッキーには、 秒の値をセットしているようですが、同じ時間に二人以上の人が 買い物かごに商品を入れると、その人達のかごは同じ物になってしまうのでしょうか? |
回答者 呑兵衛@大阪
[削除]
投稿日 12/16(日) 10:02:48
いいところに気づかれましたね。 答えは「共有される」です。 確かに、cookie 値と tmp ディレクトリに記述されるファイル名は 「年月日時分秒」です。 デフォルトでは、商品購入=書き込み操作で、排他制御(いわゆるロック)がされていないので、 ご指摘のような現象は起こり得ますし、簡単なロックでも起こり得ます。 結果、cookie は発行されますが、tmp ディレクトリに記述され、申し込みの最終確認時点で 再び参照される購入履歴は、空っぽになっているか、追加されているか、のどちらかが発生する 可能性があります。 sub input_to_cart にある if ($COOKIE{'CART'} eq '') { $COOKIE{'CART'} = $date_num; } # かごが空の場合は新規割り当て を if ($COOKIE{'CART'} eq '') { $COOKIE{'CART'} = $$; } # かごが空の場合は新規割り当て のようにして、スクリプトの実行プロセス番号 $$ を cookie とデータファイルの値(名前) にすると、同時に商品購入があったとしても、perl の内部で順番が割り当てられるので、 同時書き込みの危険性は、「多少は」薄らぎます。ただ、完全ではありませんし、 完全な排他制御は、先達の最も悩むところのようです。 |
返信(回答)する
Web裏技 |