搜尋
首頁後端開發php教程教你玩PHP如何修改SESSION的生存時間

我們學會了解了這麼多關於PHP的知識,不知道你們對PHP如何修改SESSION的生存時間是否已經完全掌握了呢,如果沒有,那就跟隨這篇文章一起繼續學習吧

需求背景:

#使用者希望他登入之後,瀏覽器就幫他記住登入狀態,這樣他就不用每次進入的時候,都需要登入一次。

session過期時間:

如果我們沒有設定session的生成時間,在設定檔中預設的生存時間是1440秒

也就是說session的生存時間是24分鐘,這裡可能有些人會有這樣的疑問:

為什麼我登入之後,24分鐘之後,並沒有退出呀?

其實在24分鐘之後,session是失效的,為什麼使用者沒有退出是因為php的回收機製造成的。

在設定檔php.ini中,你可以找到這兩個設定項,上邊的註解基本上是一樣,大概意思是說:

"回收機制"在每個session初始化發生是一個機率事件,這個機率是由以下公式得出的:

gc_probability除以gc_pisor。如果gc_probability值為1,gc_pisor值為100,則觸發「回收機制」的機率為1%。

就表示可能有100次php請求,可能才會有一次觸發「回收機制」的可能性。所以說如果session已經過期了,但是沒有

觸發到“回收機制”,session檔案還沒有被刪除,那session就是還有效的。

如果需要很精準的觸發“回收機制”,讓session已過期馬上刪除,就把以上兩個值都設定為1.

但是這樣會極度影響PHP效能。

sessionID在cookie中的生存時間:

一般我們關閉瀏覽器,如果我們沒有單獨設定sessionID過期時間的話,瀏覽器就會把cookie中對應的sessionid刪除。

我們沒有關掉瀏覽器,session的時間到了,也是失效的。但由於php的回收機制(參考下面文章:PHP session詳解),可能不會立刻就失效。

例如:

<?php

session_start();

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

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

?>

如果我們執行這段程式碼的時候,我們在Chrome瀏覽器下的Application下查看我們剛才造訪的網站的sessionid的過期時間

#1969-12-31就表示是沒有設定快取時間,關閉瀏覽器則會被刪除。

 

在「Settings」->"Advanced"->"Content settings"->"Cookies"-> "See all cookies and site data"選擇你要查看的網站也可以看到session的相關資訊。

我們把以上程式碼修改為下:

<?php

$lifeTime = 24 * 3600;

session_set_cookie_params($lifeTime);

session_start();

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

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

這時就可以看見我們設定的session在cookie中的失效時間修改了

 設定session的生存時間

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();
?>

注意:如果你的網站自訂了session_save_path,你就需要給session.gc_probability設定值,否則的話,你的session產生的sessionID檔案永遠不會被刪除。

3.採用增加cookie的時間,變相的增加session的時間

<?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);

?>

//同上,每次都會設定

注意:個人覺得,要嘛設定第二種方法,要嘛就把第一種和第三種想結合,這樣才能從根本解決問題。

<?php

$lifetime=86400;

session_set_cookie_params($lifetime);

session_start();

session_regenerate_id(true);

?>

推荐学习:《PHP视频教程

 

 

以上是教你玩PHP如何修改SESSION的生存時間的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版