以前はセッションと Cookie についてまだ漠然としていましたが、今日 Yii フレームワークを使用したときにエラー session_regenerate_id(): Session object destroy failed に遭遇したので、セッションの動作メカニズムをもう一度調べてみました。
W3Cschool から取得したセッションの定義:
アプリケーションを実行するときは、アプリケーションを開いて変更を加えてから閉じます。それはセッションによく似ています。コンピューターはあなたが誰であるかを知っています。ユーザーがアプリケーションをいつ開始し、いつ終了するかを認識します。しかし、インターネットには問題があります。サーバーはユーザーが誰で何をしているのかを知りません。これは、HTTP アドレスが状態を維持しないためです。
PHP セッションは、ユーザー情報 (ユーザー名、購入したアイテムなど) を後で使用できるようにサーバーに保存することで、この問題を解決します。ただし、セッション情報は一時的なものであり、ユーザーがサイトを離れると削除されます。情報を永続的に保存する必要がある場合は、データをデータベースに保存できます。
セッションは、訪問者ごとに一意の ID (UID) を作成し、この UID に基づいて変数を保存することで機能します。 UID は Cookie に保存されるか、URL を通じて渡されます。
まず、セッションのライフサイクルを見てみましょう。これはセッションを理解するために非常に重要です。
1. セッションはいつ作成されますか?
簡単に言うと、セッションはユーザーが初めてサーバーにアクセスするときに作成されます。セッションはphp、jsp、aspなどのWeb言語によって作成されます。静的なHTMLページにアクセスする場合は作成されません。 。 PHP を例として考えてみましょう:
a) ユーザーがこの ID は一意であり、ユーザーごとに異なります。
b) このセッション ID は PHP の $_SESSION 変数に保存され、ユーザーのブラウザに Cookie を設定することもできます。
c) その後、ユーザーが Web サイトの他のページにジャンプするときは、この Cookie に保存されているセッション ID をブラウザーに伝えるだけで済み、サーバーはこのセッション ID に対応する保存された情報を取り出します。ユーザーが誰であるかを知ることができ、ページにはユーザーに関するこの情報を表示することもできます。
d) セッションの作成後、ユーザーのショッピング カート内の商品情報の保存など、他のユーザー関連情報を保存できます。
つまり、ユーザーが Web サイトにアクセスするとき、どのように Web サイトにジャンプしたかに関係なく、通常は (セッションの有効期限があまりにも早く切れない限り) 最初から最後まで同じセッションにいます。 PHP の session_id() 関数は、現在の session_id 情報を確認できます。 Web サイトには同時に多くのユーザーがアクセスできるため、PHP はユーザーごとに一意の session_id を生成します。各ユーザーは独立したプロセスによって処理されるため、これは相互に干渉しません。ユーザー A が配置されているプロセスは、セッションが期限切れになるまで A の session_id を保存します。
つまり、セッションは通常、ユーザーが Web サイトにログインするときにセットアップされ、ユーザーがログアウトするときに閉じるかクリアされます (閉じるかクリアするかはビジネス ニーズによって異なります)。
2. セッションの有効期限はいつですか?
a) セッションの有効期限。サーバーは、長期間非アクティブであったセッションをサーバーのメモリから消去し、セッションは無効になります。 Tomcat のセッションのデフォルトの有効期限は 20 分です。
b) Session の無効化メソッドを呼び出します。
参考: http://www.w3school.com.cn/php/php_sessions.asp
次に、一般的に使用されるいくつかの PHP セッション関連関数:
Session_id ? 現在のセッション ID を取得および/または設定します セッション ID を取得します
Session_status ? 現在のセッション ステータスを返します。有効ですが、存在しません。
PHP_SESSION_ACTIVE
セッションが有効で、セッションが存在する場合