0

すべてのセッション データをデータベースに保存しようとしています。このクラスですべてを処理し、session_set_save_handler を使用して設定しました。今、それがその関数の背後にある全体的なアイデアを完全に理解していないためかどうかはわかりませんが、私が直面している問題は、セッションハンドラークラスの read() 関数が write() 関数の前に呼び出されることですは。そして、それが良くない理由は、 read() がまだデータベースに書き込まれていないデータベース内の情報を検索しようとしていて、もちろん空の結果が得られるためです。

そのため、session_set_save_handler の背後にあるドキュメントを読むことにしました。 write() が呼び出されるのは、セッションが終了したとき、または PHP が閉じられたときだけのようです。私の観点からは、これはかなり役に立たないように思えます...なぜ誰かがこの情報を取得する前に END に write() または保存するのでしょうか?

私がやろうとしているのは、誰かが使用セッションを作成すると、この情報がデータベースに書き込まれ、認証を確認したりユーザー値を検索したりするたびに、その情報を取得したいということです。

私はこれについてすべて間違っていますか?? 明確にしていただければ幸いです。私がやろうとしていることを示すコードが必要な場合は、これを更新します。

4

1 に答える 1

1

私の観点からは、これはかなり役に立たないように思えます...なぜ誰かがこの情報を取得する前に END に write() または保存するのでしょうか?

彼らがそれを取り戻す機会を得る前に、あなたはどういう意味ですか?

それを取得するには、readメソッドが呼び出されます。これは のに呼び出されるため、既に情報を取得できます。でもなんとなくこれが不満なのかな…?


PHP のセッション メカニズムがどのように機能するかについて、まったく理解していないという前提でよろしいでしょうか。

すべてのスクリプトの上で session_start を呼び出します。PHP は、スクリプトに渡されたパラメーターでセッション ID を見つけると、その ID を持つ既存のセッションを探し、見つかった場合はそこからデータを読み取ります。その時点から、そのデータを操作することができます – PHP はそれをスーパーグローバル配列 $_SESSION に入れました。そこからアクセスして、新しいデータを入れたり、既存のデータを変更したりできます。

そして、スクリプトが終了するか、session_write_close が呼び出されると、データが書き戻されます。

したがって、もちろんread関数はwrite関数の前に呼び出されます。

于 2013-08-30T14:05:16.950 に答える