今日私のWeiboに質問を投稿しました:
面接中によく質問します。「30 分で期限切れになるセッションを設定するにはどうすればよいですか?」これには多くの知識が含まれており、基本的なスキルを確認するのに特に適しています。誰が答えるでしょうか?
なぜこの質問をするのですか? 1. stackoverflow でこの問題について議論している人を見かけました 2. よくこの質問をするのを覚えていますので~~
ここで、この質問に答えましょう。
最初の回答
そして、最も一般的な答えは次のとおりです: セッションの有効期限を設定します。これは session.gc_maxlifetime です。この答えは次の理由により正しくありません。 1. まず、この PHP はセッションの gc、つまり session.gc_probability と session.gc_divisor を実行するために一定の確率を使用します (導入については、Session を使用する PHP で発生したアクセス許可拒否通知の解決策を参照してください) ) デフォルト値はそれぞれ 1 と 100 で、セッションの開始時に PHP がセッション gc を実行する可能性が 1% であることを意味します。セッションが 30 分で期限切れになるという保証はありません。
2. 高確率のクリーンアップ機会を設定するのはどうでしょうか? それでも不適切なのは、PHP が統計セッション ファイルの有効期限が切れているかどうかを判断するためです。 , PHP は、セッションに関連するセッション変数を保存するために " "A" ファイルを使用します。 5 分前に a=1 でセッション変数を設定し、5 分後に b=2 で Seesion 変数を設定したとします。すると、この変更時刻がセッションファイルは瞬間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 分で有効期限が切れるクーポンなど、実際の使用シナリオでの使用ですか?
ありがとう:)
phpセッションは期限切れになりません 有効期限を設定する方法php セッションは期限切れになります (元はセッション Cookie であり、ブラウザを閉じるとセッションが期限切れになることを意味します)。期限切れを強制したい場合は、次のようにすることができます:
phpでセッションの有効期限を設定するには、phpiniではなくコードで設定する必要があります
session_cache_expire を試してみる
例 1. session_cache_expire() example
/* キャッシュ リミッターを 'private' に設定します */
session_cache_limiter('private');
$cache_limiter = session_cache_limiter() ;
/* キャッシュの有効期限を 30 分に設定します */
session_cache_expire(30);
$cache_expire = session_cache_expire();
/* セッションを開始します */
session_start();
echo "キャッシュ リミッターは現在$cache_limiter br>";
echo "キャッシュされたセッション ページは $cache_expire 分後に期限切れになります";
?>