ホームページ  >  記事  >  バックエンド開発  >  PHP を使って遊び、SESSION の生存時間を変更する方法を教えます

PHP を使って遊び、SESSION の生存時間を変更する方法を教えます

慕斯
慕斯転載
2021-06-29 14:04:493729ブラウズ

PHP についてたくさんのことを学びました。PHP で SESSION の生存時間を変更する方法を完全にマスターできたでしょうか。そうでない場合は、この記事に従って学習を続けてください。Bar

要件の背景:

ユーザーは、ログイン後にブラウザーがログイン ステータスを記憶できるようにすることを望んでいます。そうすれば、ログインするたびにログインする必要がなくなります。

セッション有効期限:

セッション生成時間を設定しない場合、構成ファイルのデフォルトの生存時間は 1440 秒です

セッションの生存時間は24分と言われていますが、

ログイン後24分経ってもログアウトしないのはなぜですか?

実際、セッションは 24 分後に無効になります。ユーザーが終了しなかった理由は、PHP のリサイクル メカニズムによるものです。

#設定ファイル php.ini には、次の 2 つの設定項目があります。上記のコメントは基本的に同じです。

各セッションの初期化中の「リサイクル メカニズム」の発生は確率イベントです。この確率は次の式から導出されます:

gc_probability を gc_pisor で割ったもの。 gc_probability 値が 1 で、gc_pisor 値が 100 の場合、「リサイクル メカニズム」がトリガーされる確率は 1% です。

は、100 個の php リクエストが存在する可能性があり、「リサイクル メカニズム」をトリガーする可能性が 1 つだけである可能性があることを意味します。したがって、セッションの有効期限が切れても、「リサイクル メカニズム」がトリガーされておらず、セッション ファイルが削除されていない場合、セッションはまだ有効です。

「リサイクル メカニズム」を非常に正確にトリガーし、セッションの有効期限が切れたらすぐに削除する必要がある場合は、上記の値を両方とも 1 に設定します。

ただし、これは PHP に非常に影響します。パフォーマンス。

Cookie 内のセッション ID 存続時間:

通常、ブラウザを閉じます。セッション ID の有効期限を個別に設定しない場合、ブラウザは対応するセッション ID をcookie.セッションIDが削除されます。

ブラウザを閉じなかったので、時間が経過するとセッションは無効になりました。ただし、PHP のリサイクル機構 (次の記事: PHP セッションの詳細説明を参照) により、すぐに期限切れにならない場合があります。

例:

<?php

session_start();

$_SESSION["username"] = "peter";

echo "登记的用户名为:".$_SESSION["username"];

?>

このコードを実行すると、Chrome ブラウザの [アプリケーション] でアクセスしたばかりの Web サイトのセッション ID の有効期限がチェックされます。

1969-12-31 はキャッシュ時間が設定されていないことを意味し、ブラウザを閉じると削除されます。

##「設定」->「詳細設定」->「コンテンツ設定」->「Cookie」->「」すべての Cookie とサイト データを表示」 表示したい Web サイトを選択すると、セッション関連の情報も表示されます。

上記のコードを次のように変更します。

<?php

$lifeTime = 24 * 3600;

session_set_cookie_params($lifeTime);

session_start();

$_SESSION["username"] = "peter";

echo "登记的用户名为:".$_SESSION["username"];
?>
この時点で、設定したセッションの有効期限が切れていることがわかります。


セッションの有効期間を設定します。

1. 最も効果的な方法は、次のとおりです。 php.ini を変更します

#session的超时时间

session.gc_maxlifetime = 1440
2. php

<?php
$Lifetime = 3600;

$DirectoryPath = "./tmp";

is_dir($DirectoryPath) or mkdir($DirectoryPath, 0777);

//是否开启基于url传递sessionid,这里是不开启,发现开启也要关闭掉

if (ini_get("session.use_trans_sid") == true) {

ini_set("url_rewriter.tags", "");

ini_set("session.use_trans_sid", false);

}

ini_set("session.gc_maxlifetime", $Lifetime);//设置session生存时间

ini_set("session.gc_pisor", "1");

ini_set("session.gc_probability", "1");

ini_set("session.cookie_lifetime", "0");//sessionID在cookie中的生存时间

ini_set("session.save_path", $DirectoryPath);//session文件存储的路径

session_start();
?>

を使用してこの値を変更します 注: Web サイトに session_save_path をカスタマイズしている場合は、session.gc_probability の値を設定する必要があります。 sessionID ファイルは決して削除されません。


3. Cookie 時間を増やしてセッション時間を偽装します

<?php
/**

* 下面只是设置了保存sessionid的那个时间,这样的结果是关闭浏览器后session仍可以用

* 实际并没有改变session的生存时间,如果session已经过期,这也就没有意义了

*/

//只会在用户第一次访问的时候设置保存sessionid的那个cookie的过期时间

$lifetime=600;

session_set_cookie_params($lifetime);#注意到放到start的前面

session_start();



//每次都设置保存sessionid的那个cookie的过期时间

$lifetime=600;

session_start();

setcookie(session_name(),session_id(),time()+$lifetime);

?>
//上記と同様、毎回設定されます
注: 個人的には、2 番目の方法を設定するか、1 番目と 3 番目の方法を組み合わせることで、問題を根本的に解決できると感じています。

<?php

$lifetime=86400;

session_set_cookie_params($lifetime);

session_start();

session_regenerate_id(true);

?>

推荐学习:《PHP视频教程

 

 

以上がPHP を使って遊び、SESSION の生存時間を変更する方法を教えますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。