厳密に 30 分で期限切れになるセッションを設定する方法

WBOY
リリース: 2016-06-21 08:52:01
オリジナル
1407 人が閲覧しました

面接では「30 分で終了するセッションを設定するにはどうすればよいですか?」という質問をよく受けますが、これには多くの知識が含まれており、基礎的なスキルがしっかりしているかどうかをテストするのに特に適しています。誰が質問に答えますか?

なぜこの質問をするのですか? 1. Twitter でこの問題について議論している人を見かけました。 2 私がよくこの質問をするのを思い出したので~~

ここで、この質問に答えてみましょう。

最初の答え

したがって、最も一般的な答えは次のとおりです。セッションの有効期限、つまり session.gc_maxlifetime を設定します。この答えは次の理由により正しくありません。

1. まず、この PHP はセッションの gc を実行するために一定の確率、つまり session.gc_probability と session.gc_divisor を使用します (導入については、「セッション Gc の詳細を理解する」の低確率通知を参照してください) PHP の原則)。デフォルト値はそれぞれ 1 と 100 です。つまり、セッションの開始時に PHP がセッション gc を実行する可能性は 1% です。セッションが 30 分以内に期限切れになるという保証はありません。 🎜>

2. 高確率でクリーンアップの機会を設定するのはどうでしょうか? それでも不適切なのは、PHP が統計セッション ファイルの有効期限が切れているかどうかを判断するためです。この確率が高くなると、第 1 にパフォーマンスが低下します。 PHP は、セッションに関連するセッション変数を保存するために「a」ファイルを使用します。5 分前にセッション変数を a=1 に設定し、5 分後に Seesion 変数を b=2 に設定するとします。が b を追加すると、30 分で a がクリアできなくなります。以下の 3 番目の理由もあります。

3. デフォルトでは、PHP (例として Linux) はセッションのデフォルトの保存ディレクトリとして /tmp を使用し、マニュアルにも次のような記述があります:

注: 異なるスクリプトの session.gc_maxlifetime 値が異なるにもかかわらず、セッション データを保存する場所が同じである場合、値が最も小さいスクリプトがデータをクリーンアップします。この場合、このディレクティブを session.save_path と一緒に使用します。

つまり、独自の独立した save_path を指定していない 2 つのアプリケーションがある場合、1 つは有効期限を 2 分に設定し (A と仮定)、もう 1 つは有効期限を 30 分に設定します (B と仮定)。 A のセッション gc が実行されるたびに、アプリケーション B に属するセッション ファイルも同時に削除されます。

したがって、最初の答えは「完全に厳密に」正しいわけではありません。

2 番目の答え

もう 1 つの一般的な答えは、セッション ID のキャリアと Cookie の有効期限 (session.cookie_lifetime) を設定するというものです。この答えも、次の理由により不正確です。

別の言い方をすると、Cookie とセッションの違いを調べてみましょう。セッションの有効期限はサーバーの有効期限ですが、Cookie の有効期限はクライアント (ブラウザ) によって保証されます。ブラウザの有効期限が切れると、この Cookie (セッション ID を含む) は送信されなくなりますが、リクエストを作成する場合は、このセッション ID の値を引き続き使用できます。

3 番目の答え

memcache、redis などを使用してください。OK、この答えは正しい答えです。ただし、質問者は次は、PHP だけを使用した場合はどうなるのかと尋ねるはずです。

4番目の答え

もちろん、面接はあなたの考えを徹底的に試すためのものではありませんが、その過程でこれらの落とし穴を指摘しますので、一般的に言えば、質問の意味を満たすアプローチは次のとおりです。

1. Cookie の有効期限を 30 分に設定し、セッションの有効期間を 30 分に設定します。

2. 各セッション値にタイムスタンプを自分で追加します。

3. 各訪問の前に、タイムスタンプを決定します。

最後に、何人かの学生が、なぜ有効期限を 30 分に設定する必要があるのか​​と尋ねました。第一に、これは面接用であり、第二に、30 分で有効期限が切れるクーポンなどの実際の使用シナリオでは?

この記事のURL:http://www.laruence.com/2012/01/10/2469.html

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!