phpの作り方のヒントの履歴

セッションのトランザクション処理


phpセッション機能はトランザクション処理がされている。

セッションデータは、session_write_close() をコールしなくても、スクリプト終了時に保存されます。しかし、 セッションデータは、同時書き込みを防ぐためにロックされるため、 ある時点であるセッションの処理ができるスクリプトは、1つだけです。 セッションでフレームセットを使用する場合、 このロックのためにフレームがひとつずつロードされるような経験をするでしょう。 セッションへの全ての変更が行われるとすぐにセッションを終了することにより、 全てのフレームのロードに要する時間を減らすことができます。

http://www.php.net/manual/ja/function.session-write-close.php

「すごいリロード対策」

いわゆるトランザクショントークン

こんな感じで実装できるらしい → http://itpro.nikkeibp.co.jp/article/COLUMN/20070910/281585/

ふと、二つのプロセスが同時に処理をして、session_startと本当に同時に変数を書き換えたらどうなるのか気になって試してみたら、ちゃんと動いた。

(本当に同時に=phpセッション情報をストレージから読み込み、修正したデータを書き込むまでの間のそれなりに短い間)

調べてみたら、「ある時点であるセッションの処理ができるスクリプトは、1つだけです。(上記の引用)」とのこと。

ということは、重い処理をしたり、同時に二つの処理をするときには session_write_close() を早めに呼び出してあげたほうが良いのかもしれない。