PHP中Session如何使用,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
洛龍網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,洛龍網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為洛龍上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的洛龍做網(wǎng)站的公司定做!
在 PHP 中,Session 是一種服務(wù)器端的機(jī)制,服務(wù)器使用一種散列表的結(jié)構(gòu)(類似于 JSON)來(lái)保存信息。相比于保存在客戶端的 Cookie,Session 將用戶交互信息保存在了服務(wù)器端,使得同一個(gè)客戶端每次和服務(wù)端交互時(shí),不需要每次都傳回所有的 Cookie 值,而是只需要傳回一個(gè) ID 即可,這個(gè) ID 是客戶端第一次訪問(wèn)服務(wù)器的時(shí)候生成的,而且是唯一的。 |
還有一點(diǎn)就是,因?yàn)?Cookie 存儲(chǔ)在客戶端,所以用戶有權(quán)禁用 Cookie,而 Session 是存儲(chǔ)在服務(wù)器端的,用戶無(wú)法禁用。
Session 簡(jiǎn)介
Session 在 Web 技術(shù)中占有非常重要的地位。由于網(wǎng)頁(yè)是一種無(wú)狀態(tài)的連接程序,無(wú)法記錄用戶的瀏覽狀態(tài),所以需要通過(guò) Session 來(lái)記錄用戶的有關(guān)信息,以供用戶再次以這個(gè)身份對(duì) Web 服務(wù)器發(fā)起請(qǐng)求。
Session 中文是“會(huì)話”的意思,與 Cookie 類似,都是用來(lái)儲(chǔ)存使用者相關(guān)資料的,比如用戶名、訪問(wèn)權(quán)限、登陸時(shí)間等。與 Cookie 最大不同之處在于 Cookie 是將資料存放于客戶端電腦之中,而 Session 則是將數(shù)據(jù)存放于服務(wù)器系統(tǒng)之下。
當(dāng)開(kāi)啟一個(gè) Session 時(shí),PHP 將會(huì)創(chuàng)建一個(gè)隨機(jī)的 Session ID(例如“t5is1r7ct740dn390kuv3mpcse”),每個(gè)用戶的 Session ID 都是唯一的,而且 Session ID 與服務(wù)器上存儲(chǔ)該用戶 Session 數(shù)據(jù)的文本文件名稱相同。
Session ID 會(huì)分別保存在客戶端和服務(wù)器端兩個(gè)位置。
客戶端,使用臨時(shí)的 Cookie 保存在瀏覽器指定目錄中,Cookie 名稱默認(rèn)為“PHPSESSID”;
服務(wù)器端,以文本文件形式保存在指定的 Session 目錄中。
默認(rèn)情況下,這個(gè) Session ID 將作為一個(gè) Cookie 發(fā)送給 Web 瀏覽器,接下來(lái) PHP 頁(yè)面將使用這個(gè) Cookie 來(lái)訪問(wèn) Session 的信息。
與 Cookie 相比,Session 擁有以下的優(yōu)勢(shì):
通常情況下 Session 更加安全,因?yàn)?Session 中的數(shù)據(jù)不會(huì)在客戶端和服務(wù)器端來(lái)回重復(fù)傳遞;
Session 能夠存儲(chǔ)比 Cookie 更多的信息;
在用戶禁用 Cookie 的情況下,使用一些方法任然能保持 Session 正常工作。
Session 的工作原理
我們可以使用 PHP 腳本創(chuàng)建和存儲(chǔ) Session 中的數(shù)據(jù)。在創(chuàng)建一個(gè) Session 后,所有 Session 變量在用戶一次會(huì)話期間里訪問(wèn)的所有頁(yè)面都有效。其工作機(jī)制如下圖所示。
Session 的存儲(chǔ)方式
Session 默認(rèn)會(huì)以文本的形式存儲(chǔ)在服務(wù)器的臨時(shí)目錄中,文件名以“sess_”作為前綴,后面加上“Session ID”,例如“sess_t5is1r7ct740dn390kuv3mpcse”。
我們可以在 php.ini 中找到 Session 的相關(guān)配置,下面是一些常用的配置信息:
session.save_handler = files #session 的存儲(chǔ)方式,默認(rèn)是文件,還可以是 redis 或者是 memcache session.save_path = "d:/wamp/tmp" #session 文件的存儲(chǔ)目錄 session.use_cookies = 1 #是否使用 cookie 存儲(chǔ) session_id session.name = PHPSESSID #客戶端存儲(chǔ) session_id 的會(huì)話名 session.auto_start = 0 #是否自動(dòng)開(kāi)啟 session session.cookie_lifetime = 0 #設(shè)置客戶端中存儲(chǔ)的 session_id 的過(guò)期時(shí)間,以秒為單位 session.use_only_cookies=0 #是否只使用 cookie 來(lái)處理 session_id session.gc_divisor = 1000 #進(jìn)程比率 session.gc_probability = 1 #垃圾回收的處理幾率 session.gc_maxlifetime = 1440 #設(shè)置 session 文件的過(guò)期時(shí)間
Session 的生命周期
Session 在以下情況會(huì)被刪除,也就是失效:
Session 超時(shí),超時(shí)指的是連續(xù)一定時(shí)間服務(wù)器沒(méi)有收到該 Session 所對(duì)應(yīng)客戶端的請(qǐng)求,并且這個(gè)時(shí)間超過(guò)了服務(wù)器設(shè)置的 Session 超時(shí)的最大時(shí)間;
程序調(diào)用方法主動(dòng)銷毀 Session;
服務(wù)器關(guān)閉或服務(wù)停止。
看完上述內(nèi)容,你們掌握PHP中Session如何使用的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!