1. 程式人生 > >【l轉】php中session過期時間設定及回收機制詳解

【l轉】php中session過期時間設定及回收機制詳解

php中session過期時間設定及回收機制詳解:
修改php中的session過期時間可以修改php配置檔案php.ini中的session.gc_maxlifetime即可。
當php每發出一次請求時,會有1/100的概率(預設值)觸發"session回收"。如果"session回收"發生,那就會檢查/tmp/sess_*的檔案,如果最後的修改時間到現在超過了1440秒(gc_maxlifetime的值),就將其刪除,意味著這些session過期失效。
1. session在server端(一般是Apache with PHP module)如何存在的?
預設的,php會將session儲存在/tmp目錄下,檔名為這個樣子:sess_01aab840166fd1dc253e3b4a3f0b8381。每一個檔案對應了一個session(會話)。
more /tmp/sess_01aab840166fd1dc253e3b4a3f0b8381
username|s:9:”phpzixue.cn”;admin|s:1:”0″;
#變數名|型別:長度:值
刪除這裡的session檔案,就表示對應的session失效了。
2. session在client端(一般是瀏覽器)如何存在的?
session在瀏覽器端,只需要儲存session ID(由server端生成的唯一ID)就可以了。有兩種儲存方式:在cookie中、在url裡面。如果cookie中儲存session ID,就可以看到瀏覽器的cookie中有一個PHPSESID變數。如果是URL傳遞的,就可以看到形如:
index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381的URL。(在server端通過session.use_cookies來控制使用哪一種方式)
3. 在server端,php如何判斷session檔案是否過期?
如果”最後的修改時間”到”現在”超過了gc_maxlifetime(預設是1440)秒,這個session檔案就被認為是過期了,在下一次session回收的時候,如果這個檔案仍然沒有被更改過,這個session檔案就會被刪除(session就過期了)。
簡單的說,如果我登入到某網站,如果在1440秒(預設值)內沒有操作過,那麼對應的session就認為是過期了。
所以,修改php.ini檔案中的gc_maxlifetime變數就可以延長session的過期時間了:(例如,我們把過期時間修改為86400秒)
session.gc_maxlifetime = 86400
然後,重啟你的web服務(一般是apache)就可以了。
注意:php5裡面session過期使用了回收機制。這裡設定時間為86400秒,如果session在86400秒內沒有被修改過,那麼在下一次“回收”時才真的被刪除。
4. session“回收”何時發生?
預設情況下,每一次php請求,就會有1/100的概率發生回收,所以可能簡單的理解為“每100次php請求就有一次回收發生”。這個概率是通過以下引數控制的
#概率是gc_probability/gc_divisor
session.gc_probability = 1
session.gc_divisor = 100
注意1:假設這種情況gc_maxlifetime=120,如果某個session檔案最後修改時間是120秒之前,那麼在下一次回收(1/100的概率)發生前,這個session仍然是有效的。
注意2:如果你的session使用session.save_path中使用別的地方儲存session,session回收機制有可能不會自動處理過期session檔案。這時需要定時手動(或者crontab)的刪除過期的session:cd /path/to/sessions; find -cmin +24 | xargs rm
5. 一些特殊情況
因為回收機制會檢查檔案的“最後修改時間”,所以如果某個會話是活躍的,但是session的內容沒有改變過,那麼對應的session檔案也就沒有改變過,回收機制會認為這是一個長時間沒有活躍的session而將其刪除。這是我們不願看到的,可以通過增加如下的簡單程式碼解決這個問題:
<?php
if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60)
$_SESSION['last_access'] = time();
?>
程式碼會每隔60秒,嘗試修改修改一次session。
總結:如果想修改session過期時間,修改變數gc_maxlifetime就可以了。php5的session採用被動的回收機制(garbage collection)。過期的session檔案不會自己消失,而是通過觸發“回收”來處理過期的session。

相關推薦

lphpsession過期時間設定回收機制

php中session過期時間設定及回收機制詳解: 修改php中的session過期時間可以修改php配置檔案php.ini中的session.gc_maxlifetime即可。 當php每發出一次請求時,會有1/100的概率(預設值)觸發"session回收"。如果"session回收"發生,那就會檢查

為什麼一段時間後網站後臺自動退出 phpsession過期時間設定

修改php配置檔案中的session.gc_maxlifetime。如果想了解更多session回收機制,繼續閱讀。(本文環境php5.2) 概述:每一次php請求,會有1/100的概率(預設值)觸發“session回收”。如果“session回收”發生,那就會檢查/t

phpsession過期時間設定

網上很多人給出瞭解答:修改配置檔案中的session.gc_maxlifetime。如果想了解更多session回收機制,繼續閱讀。(本文環境php5.2) 概述:每一次php請求,會有1/100的概率(預設值)觸發“session回收”。如果“session回收”發生,那就會檢查/tmp/sess_*的檔

js的事件委托或是事件代理

ava 程序 fff 員工 我們 cnblogs 上傳 on() 類型 起因: 1、這是前端面試的經典題型,要去找工作的小夥伴看看還是有幫助的; 2、其實我一直都沒弄明白,寫這個一是為了備忘,二是給其他的知其然不知其所以然的小夥伴們以參考; 概述: 那什麽叫

如何嚴格設置phpsession過期時間

基本原理 默認 方法 path bag 當前時間 並不會 itl ring 如何嚴格限制session在30分鐘後過期!1.設置客戶端cookie的lifetime為30分鐘;2.設置session的最大存活周期也為30分鐘;3.為每個session值加入時間戳,然後在程序

PHP的後期靜態綁定(Late Static Bindings )

mbo 代碼 當前 test num ngs color public name php5.3版本新增的靜態綁定的靜態綁定語法,也成為PHP的後期靜態綁定,如下 class A{ public static function func1(){ e

PHP session過期時間設定

1:設定以下兩項為有效時間 session.cookie_lifetime session.gc_maxlifetime Session有效期的引數是session.gc_maxlifetime 2:設定 session.gc_probability = 1 sessio

讓你不再害怕指針——C指針(經典,非常詳細)

有一個 情況 value 第一個字符 接下來 意思 strcpy abcdefg 數值 前言:復雜類型說明 要了解指針,多多少少會出現一些比較復雜的類型,所以我先介紹一下如何完全理解一個復雜類型,要理解復雜類型其實很簡單,一個類型裏會出現很多運算符,他們也像普通的表

四款經典3.7v鋰電池充電電路圖

大小 來源 輸入 控制 電路原理圖 cfa and 繼續 lan 3.7v鋰電池充電電路圖(一) 1、鋰電池的充電: 根據鋰電池的結構特性,最高充電終止電壓應為4.2V,不能過充,否則會因正極的鋰離子拿走太多,而使電池報廢。其充放電要求較高,可采用專用的恒流、恒壓充電器進行

pythonNumpystack(),hstack(),vstack()函數

一起 int pan 控制 意思 name 體會 你們 如何 轉自 https://blog.csdn.net/csdn15698845876/article/details/73380803 這三個函數有些相似性,都是堆疊數組,裏面最難理解的應該就是stack()函數了,

VMware虛擬機三種網絡模式超

編輯器 網卡 host 子網 什麽 script network 如何解決 技術 【原文】https://www.toutiao.com/i6596228488666022403/ 由於Linux目前很熱門,越來越多的人在學習Linux,但是買一臺服務放家裏來學習,實在是很

php-session過期時間設定設定免登陸過期時間

今天用tp框架做一個登陸介面的時候,對於session的過期時間這個問題表費解,例如如何設定一個準確的session過期時間。 通過自己看tp的官方文件,裡面只提到了兩個,但是這兩個一個是session.gc_maxlifetime ,一個是cookie.session_lifetime。但是

thinkphpsession過期時間的配置

thinkphpsession過期週期是無效的 現在修改一下 一、修改tp的公共檔案 Thinkphp/Common/functions.php 將 if(isset($name['expire']))          ini_set('session.gc_maxlif

php session過期時間設定,純新手教學

t.php 操作方法:首先開啟t.php,然後開啟t2.php,不停地重新整理t2.php,就會不停的輸出username的值。而如果5秒之內不重新整理t2.php,就會發現,儲存的session值為空了 <?php function setSession

php二維數組排序問題方法

ges cti cmp each ace esc 對數 x11 用法 PHP中二維數組排序,可以使用PHP內置函數uasort() 示例一: 使用用戶自定義的比較函數對數組中的值進行排序並保持索引關聯 回調函數如下:註意回調函數的返回值是負數或者是false的時候,表

sklearn利用sklearn訓練LDA主題模型調參

人生苦短,我愛python,尤愛sklearn。sklearn不僅提供了機器學習基本的預處理、特徵提取選擇、分類聚類等模型介面,還提供了很多常用語言模型的介面,sklearn.decomposition.LatentDirichletAllocation就

常用模組HC-05藍芽串列埠通訊模組使用(例項:手機藍芽控制STM32微控制器)

HC-05藍芽串列埠通訊模組應該是使用最廣泛的一種藍芽模組之一了。為什麼呢?因為HC05模組是一款高效能主從一體藍芽串列埠模組,可以不用知道太多藍芽相關知識就可以很好的上手。說白了,只是個藍芽轉串列埠的裝置,你只要知道串列埠怎麼程式設計使用,就可以了,實現了所謂的透明傳輸。但

學習筆記編譯Linux核心(下)---KConfig、Makefile以及ARM平臺Linux核心的編譯

本文主要介紹Linxu2.6的核心配置系統。 如果你瀏覽一下原始碼目錄,就可以發現原始碼目錄及其子目錄中有很多的KConfig檔案和Makefile檔案。這些檔案什麼作用呢?正是這些檔案組成了Li

thinkphp 5 , tp5的 session過期時間設定方法

網站有後臺與前臺應用目錄,後臺如果為application/admin 前臺如果為application/index 那麼, 他們一般會在單獨的應用目錄中設定config.php配置檔案 比如你可以檢視.application/index/config.ph

tomcat session過期時間設定

在tomcat中可以設定登入使用者session的過期時間,設定方法如下:1. 開啟tomcat管理頁面,tomcat的管理頁面的預設使用者名稱是admin,密碼空.登入後->Tomcat Manager->你要設定的專案->commands欄目裡有個exp