目錄
一、session.save_handler = files
二、session.save_handler = user
首頁 後端開發 php教程 PHP的SESSION使用详解

PHP的SESSION使用详解

Jun 20, 2016 pm 01:04 PM
cookie path save session

PHP服务端缓存SESSION使用详解

一、session.save_handler = files

1. session_start()

(1)session_start()是session机制的开始,它有一定概率开启垃圾回收,因为session是存放在文件中,PHP自身的垃圾回收是无效的,SESSION的回收是要删文件的,这个概率是根据php.ini的配置决定的,但是有的系统是 session.gc_probability = 0,这也就是说概率是0,而是通过cron脚本来实现垃圾回收。

session.gc_probability = 1

session.gc_divisor = 1000
session.gc_maxlifetime = 1440//过期时间 默认24分钟
//概率是 session.gc_probability/session.gc_divisor 结果 1/1000, 
//不建议设置过小,因为session的垃圾回收,是需要检查每个文件是否过期的。
session.save_path = //好像不同的系统默认不一样,有一种设置是 "N;/path"

//这是随机分级存储,这个样的话,垃圾回收将不起作用,需要自己写脚本

(2)session会判断当前是否有$_COOKIE[session_name()];session_name()返回保存session_id的COOKIE键值,

这个值可以从php.ini找到session.name = PHPSESSID //默认值PHPSESSID

(3)如果不存在会生成一个session_id,然后把生成的session_id作为COOKIE的值传递到客户端,相当于执行了下面COOKIE操作,注意的是,这一步执行了setcookie()操作,COOKIE是在header头中发送的,这之前是不能有输出的,PHP有另外一个函数 session_regenerate_id() 如果使用这个函数,这之前也是不能有输出的。

<p>setcookie(</p> session_name(),<br /> session_id(),<br /> session.cookie_lifetime,//默认0<br /> session.cookie_path,//默认'/'当前程序跟目录下都有效<br /> session.cookie_domain,//默认为空<br /><p>)</p>
登入後複製

(4)如果存在,那么session_id = $_COOKIE[session_name];然后去session.save_path指定的文件夹里去找名字为'SESS_' .session_id()的文件,读取文件的内容反序列化,然后放到$_SESSION中

2. 为$_SESSION赋值

比如新添加一个值$_SESSION['test'] = 'blah'; 那么这个$_SESSION只会维护在内存中,当脚本执行结束的时候,用把$_SESSION的值写入到session_id指定的文件夹中,然后关闭相关资源。这个阶段有可能执行更改session_id的操作,比如销毁一个旧的的session_id,生成一个全新的session_id.一半用在自定义session操作,角色的转换上,比如Drupal.Drupal的匿名用户有一个SESSION的,当它登录后需要换用新的session_id

<p><?php</p>if(isset($_COOKIE[session_name()])){<br />	setcookie(session_name(),'',time()-42000,'/');//旧session cookie过期<br />}<br />session_regenerate_id();//这一步会生成新的session_id<br /><p>//session_id()返回的是新的值 </p>
登入後複製

3.写入SESSION操作

在脚本结束的时候会执行SESSION写入操作,把$_SESSION中值写入到session_id命名的文件中,可能已经存在,可能需要创建新的文件。

4. 销毁SESSION

SESSION发出去的COOKIE一般属于即时COOKIE,保存在内存中,当浏览器关闭后,才会过期,假如需要人为强制过期,比如退出登录,而不是关闭浏览器,那么就需要在代码里销毁SESSION,方法有很多:

<p>setcookie(session_name(), session_id(), time() - 8000000, ..);//退出登录前执行</p>usset($_SESSION);//这会删除所有的$_SESSION数据,刷新后,有COOKIE传过来,但是没有数据<br /><p>session_destroy();//这个作用更彻底,删除$_SESSION 删除session文件,和session_id</p>
登入後複製

当不关闭浏览器的情况下,再次刷新,2和3都会有COOKIE传过来,但是找不到数据

二、session.save_handler = user

用户自定义session处理机制,更加直观

session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc');
登入後複製

(1)session_start(),

执行open($save_path, $session_name)打开session操作句柄,$save_path 在session.save_handler = files的情况下它就是session.save_path,但是如果用户自定的话,这个两个参数都用不上,直接返回TRUE。

执行read($id)从中读取数据.//这个参数是自动传递的就是session_id(),可以通过这个值进行操作。

(2)脚本执行结束,执行write($id, $sess_data) //两个参数,很简单。

(3)假如用户需要session_destroy(),先执行destroy,在执行第2步,一个实际例子:

<p><?php</p>//SESSION初始化的时候调用<br />function open($save_path, $session_name){<br />	global $sess_save_path;<br />	$sess_save_path=$save_path;<br />	return(true);<br />}<br /><br />//关闭的时候调用<br />function close(){<br />	return(true);<br />}<br /><br />function read($id){<br />	global $sess_save_path;<br />	$sess_file="$sess_save_path/sess_$id";<br />	return(string) @file_get_contents($sess_file);<br />}<br />//脚本执行结束之前,执行写入操作<br />function write($id, $sess_data){<br />	echo "sdfsf";<br />	global $sess_save_path;<br />	$sess_file="$sess_save_path/sess_$id";<br />	if($fp=@fopen($sess_file, "w")){<br />		$return=fwrite($fp, $sess_data);<br />		fclose($fp);<br />		return $return;<br />	}else{<br />		return(false);<br />	}<br />}<br /><br />function destroy($id){<br />	global $sess_save_path;<br />	$sess_file="$sess_save_path/sess_$id";<br />	return(@unlink($sess_file));<br />}<br /><br />function gc($maxlifetime){<br />	global $sess_save_path;<br />	foreach(glob("$sess_save_path/sess_*") as $filename){<br />		if(filemtime($filename) + $maxlifetime < time()){<br />			@unlink($filename);<br />		}<br />	}<br />	return true;<br />}
登入後複製


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱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.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

電腦上的cookie在哪裡 電腦上的cookie在哪裡 Dec 22, 2023 pm 03:46 PM

電腦上的Cookie儲存在瀏覽器的特定位置,具體位置取決於使用的​​瀏覽器和作業系統:1、Google Chrome, 儲存在C:\Users\YourUsername\AppData\Local\Google\Chrome\User Data\Default \Cookies中等等。

cookie存在哪裡 cookie存在哪裡 Dec 20, 2023 pm 03:07 PM

Cookie通常儲存在瀏覽器的Cookie資料夾中的,瀏覽器中的Cookie檔案通常以二進位或SQLite格式存儲,如果直接開啟Cookie文件,可能會看到一些亂碼或無法讀取的內容,因此最好使用瀏覽器提供的Cookie管理介面來檢視和管理Cookie。

設定Linux系統的PATH環境變數步驟 設定Linux系統的PATH環境變數步驟 Feb 18, 2024 pm 05:40 PM

Linux系統如何設定PATH環境變數在Linux系統中,PATH環境變數用來指定係統在命令列中搜尋執行檔的路徑。正確設定PATH環境變數可以方便我們在任何位置執行系統指令和自訂指令。本文將介紹如何在Linux系統中設定PATH環境變量,並提供詳細的程式碼範例。查看目前的PATH環境變數在終端機中執行以下指令,可以查看目前的PATH環境變數:echo$P

session失效怎麼解決 session失效怎麼解決 Oct 18, 2023 pm 05:19 PM

session失效通常是由於 session 的生存時間過期或伺服器關閉導致的。其解決方法:1、延長session的生存時間;2、使用持久化儲存;3、使用cookie;4、非同步更新session;5、使用會話管理中介軟體。

PHP Session 跨域問題的解決方法 PHP Session 跨域問題的解決方法 Oct 12, 2023 pm 03:00 PM

PHPSession跨域問題的解決方法在前後端分離的開發中,跨域請求已成為常態。在處理跨域問題時,我們通常會涉及session的使用和管理。然而,由於瀏覽器的同源策略限制,跨域情況下預設無法共享session。為了解決這個問題,我們需要採用一些技巧和方法來實現session的跨域共享。一、使用cookie跨域共享session最常

手機cookie在哪裡 手機cookie在哪裡 Dec 22, 2023 pm 03:40 PM

手機上的Cookie儲存在行動裝置的瀏覽器應用程式中:1、在iOS裝置上,Cookie儲存在Safari瀏覽器的Settings -> Safari -> Advanced -> Website Data中;2、在Android裝置上,Cookie儲存在Chrome瀏覽器的Settings -> Site settings -> Cookies中等等。

瀏覽器cookie的儲存位置詳解 瀏覽器cookie的儲存位置詳解 Jan 19, 2024 am 09:15 AM

隨著網路的普及,我們使用瀏覽器進行上網已經成為一種生活方式。在日常使用瀏覽器過程中,我們常會遇到需要輸入帳號密碼的情況,如網購、社交、郵件等。這些資訊需要瀏覽器記錄下來,以便下次造訪時不需要再次輸入,這時候Cookie就派上了用場。什麼是Cookie? Cookie是指由伺服器端發送到使用者瀏覽器上並儲存在本地的一種小型資料文件,它包含了一些網站的使用者行為

Cookie設定的常見問題及解決方案 Cookie設定的常見問題及解決方案 Jan 19, 2024 am 09:08 AM

Cookie設定的常見問題及解決方案,需要具體程式碼範例隨著網路的發展,Cookie作為一種最常見的常規技術,已廣泛應用於網站和應用程式中。 Cookie,簡單來說,是一種儲存在使用者電腦上的資料文件,可用於儲存使用者在網站上的信息,包括登入名稱、購物車內容、網站首選項等等。 Cookie對於開發人員來說是必不可少的工具,但同時,Cookie設定常常會遇到

See all articles