ホームページ  >  記事  >  バックエンド開発  >  PHP セッションをもう一度見てみる_PHP チュートリアル

PHP セッションをもう一度見てみる_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:32:34979ブラウズ

Soulak、Weiboから転載する際は明記してください: @evagle

以前は、セッションと 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) セッションの作成後、ユーザーのショッピング カート内の商品情報の保存など、他のユーザー関連情報を保存できます。

e) セッションが生成された後、ユーザーがアクセスを続ける限り、サーバーはセッションの最終アクセス時刻を更新し、セッションを維持します。ユーザーがサーバーにアクセスするたびに、セッションの読み取りまたは書き込みに関係なく、サーバーはユーザーのセッションが「アクティブ」であるとみなします。


そのため、ユーザーが Web サイトにアクセスすると、通常は最初から最後まで同じセッションに参加します (セッションがあまりにも早く期限切れになる場合を除く)。どのように Web サイトにジャンプしても、セッションのコンテンツにアクセスできます。

PHP の session_id() 関数は、現在の session_id 情報を確認できます。 Web サイトには同時に多くのユーザーがアクセスできるため、PHP はユーザーごとに一意の session_id を生成します。各ユーザーは独立したプロセスによって処理されるため、これは相互に干渉しません。ユーザー A が配置されているプロセスは、セッションが期限切れになるまで A の session_id を保存します。

つまり、一般的にセッションはユーザーが Web サイトにログインするときに設定され、ユーザーがログアウトするときにセッションが閉じるかクリアされます (閉じるかクリアするかはビジネス ニーズによって異なります)。

2. セッションの有効期限はいつですか?

a) サーバーにアクセスするユーザーが増えるにつれて、セッションの数も増えます。メモリのオーバーフローを防ぐために、サーバーは長期間アクティブでなかったセッションをメモリから削除します。この時間はセッションのタイムアウト時間です。タイムアウト期間が経過してもサーバーにアクセスしない場合、セッションは自動的に期限切れになります。

b) Session の無効化メソッドを呼び出します。


参考: http://www.w3school.com.cn/php/php_sessions.asp

次に、一般的に使用される PHP セッション関連の関数がいくつかあります。

session_start — 新しいセッションを開始するか、既存のセッションを再開します セッションが開始します
session_id — 現在のセッション ID を取得および/または設定します セッション ID を取得します
session_status — 現在のセッション ステータスを返してセッション ステータスを取得します。ステータスは 3 つあります

  • PHP_SESSION_DISABLEDPHP_SESSION_DISABLED if sessions are disabled.
  • PHP_SESSION_NONE if sessions are enabled, but none exists.
  • PHP_SESSION_ACTIVE セッションが無効の場合。
    PHP_SESSION_NONE
    セッションが有効だが存在しない場合。

    PHP_SESSION_ACTIVE

    セッションが無効の場合有効になっており、1 つ存在します。 session_regenerate_id — 現在のセッション ID を新しく生成された ID で更新して、現在のセッションを再割り当てします
    session_destroy — セッションに登録されているすべてのデータを破棄します セッション全体を完全に削除します

    session_unset — すべてのセッション変数を解放します 現在のセッションに保存されているすべての変数を削除します




    詳細については、http://www.php.net/manual/en/ref.session.phpを参照してください。





    🎜 🎜 🎜 🎜

    www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/75576​​5.html技術記事 Soulak、Weibo から転載する場合は明記してください: @evagle セッションと Cookie について漠然としていましたが、今日 yii フレームワークを使用しているときに、session_regenerate_id(): Session object destr...
    に遭遇しました。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。