主頁 > 知識(shí)庫(kù) > PHP學(xué)習(xí)筆記之session

PHP學(xué)習(xí)筆記之session

熱門標(biāo)簽:上海做外呼線路的通信公司 地圖標(biāo)注專員怎么樣 電話機(jī)器人銷售主要負(fù)責(zé)什么 四川保險(xiǎn)智能外呼系統(tǒng)供應(yīng)商 房產(chǎn)中介用的是什么外呼系統(tǒng) 長(zhǎng)沙做地圖標(biāo)注公司 寧波外呼營(yíng)銷系統(tǒng) 遼寧ai電銷機(jī)器人價(jià)格 福建銀行智能外呼系統(tǒng)價(jià)格

cookie和session是web開發(fā)新手容易搞混的兩個(gè)概念,弄清楚兩者有助于對(duì)web交互更好的理解。個(gè)人認(rèn)為session和cookie的區(qū)別主要有如下幾點(diǎn):

cookie

信息保存在客戶端

具體實(shí)現(xiàn)由客戶端負(fù)責(zé)

數(shù)據(jù)大小和數(shù)量一般有限制

數(shù)據(jù)容易被竊取和篡改

session

數(shù)據(jù)保存在服務(wù)端

具體實(shí)現(xiàn)由服務(wù)器負(fù)責(zé)

數(shù)據(jù)大小和數(shù)量原則上無限制

安全性較高,可信度強(qiáng)

狹義的session指的是web會(huì)話中的session id以及關(guān)聯(lián)的數(shù)據(jù),廣義的session指通信雙方的交互會(huì)話。例如用戶登錄是一次session交互,在ATM機(jī)取錢是一次session交互,等等。

session的細(xì)節(jié)

session的主要作用是標(biāo)識(shí)一個(gè)會(huì)話,并保存會(huì)話期間的數(shù)據(jù)。以下是session的一些細(xì)節(jié)。

存取

PHP通過$_SESSION超全局變量獲取和存放session中的所有數(shù)據(jù)。$_SESSION是一個(gè)數(shù)組,可以方便的進(jìn)行賦值和讀取,例如:

$name = $_SESSION['NAME'];  // 讀取session中的name值
$_SESSION['NAME'] = 'new name';   // 賦新值
unset($_SESSION['NAME']);     // 移除session中的值

過期時(shí)間

默認(rèn)session中的數(shù)據(jù)有可能在session超時(shí)后被移除,這取決于PHP是否及時(shí)運(yùn)行垃圾回收。由于PHP運(yùn)行垃圾回收的系數(shù)是請(qǐng)求數(shù),帶來的后果是:1. 低流量的站點(diǎn)超時(shí)很久后session數(shù)據(jù)也未被移除; 2. 大流量站點(diǎn)頻繁的進(jìn)行session垃圾回收; 3. 運(yùn)行垃圾回收在執(zhí)行用戶請(qǐng)求前,遇到了運(yùn)行垃圾回收的用戶可能會(huì)感受到系統(tǒng)延遲。一個(gè)更好的解決辦法是禁用PHP的默認(rèn)垃圾回收,以cron任務(wù)定時(shí)執(zhí)行session_gc函數(shù)。這樣既保證session的時(shí)效性,也能帶來性能和用戶體驗(yàn)上的提升。

手動(dòng)移除session中的數(shù)據(jù)可以用unset移除單個(gè)數(shù)據(jù)項(xiàng),或者session_destroy函數(shù)暴力刪除所有的數(shù)據(jù)。

存儲(chǔ)介質(zhì)和序列化

session中的數(shù)據(jù)默認(rèn)以文件形式保存在磁盤上,session打開時(shí)讀取文件內(nèi)容反序列化,然后填充$_SESSION數(shù)組。在大流量的站點(diǎn)中,存放session文件的目錄下會(huì)包含大量小文件,將對(duì)文件系統(tǒng)造成沉重的IO負(fù)擔(dān)。

session模塊中的handler可以指定數(shù)據(jù)保存方式,例如存放到數(shù)據(jù)庫(kù)中、redis/memcache等介質(zhì)中。PHP內(nèi)置的handler包括files(默認(rèn)),redis和memcache。用戶可以通過session_set_save_handler來注冊(cè)自己的handler。

session中存放的數(shù)據(jù)可能是字符串等基本類型,也可能是數(shù)組、對(duì)象等復(fù)雜類型。session設(shè)置中的serialize_handler用來設(shè)置序列化和反序列化的handler,hanlder將數(shù)據(jù)序列化后,在交給save_handler保存。由序列化可知,resource等類型不能也不應(yīng)該保存到session中。把一個(gè)db的連接句柄保存到session中,然后10分鐘后再取出來用,這樣的想法應(yīng)該盡快拋掉。

session設(shè)置名稱

由于http是無狀態(tài)協(xié)議,客戶端請(qǐng)求時(shí)需要攜帶session id才能讓服務(wù)端區(qū)分出session。默認(rèn)的標(biāo)識(shí)session id的名稱是PHPSESSID,可以使用session_name來設(shè)置其他的名稱。例如為了防止攻擊者猜出后端是PHP語言的系統(tǒng),可以設(shè)置session id的名稱為JSESSIONID,迷惑攻擊者。

session自動(dòng)開啟

目前主流的PHP版本默認(rèn)都不會(huì)自動(dòng)開啟session。例如某個(gè)訪客就隨便看一下頁面就離開,如果自動(dòng)開啟session,將進(jìn)行一系列的初始化操作后將session id發(fā)送到客戶端,以便下次訪問時(shí)能識(shí)別出用戶。對(duì)于一次性的訪客,或者非系統(tǒng)的登錄用戶,這些操作只會(huì)帶來額外的開銷。

session不自動(dòng)開啟的劣勢(shì)是使用session前,要確保session已經(jīng)打開,否則可能取到空數(shù)據(jù)。如果重命名了默認(rèn)的session名稱,需要在session_start前調(diào)用session_name指示目前使用的session名稱。

分布式session

大流量的站點(diǎn),后端提供服務(wù)的往往不止一臺(tái)PHP服務(wù)器。如果用戶的多次請(qǐng)求不是落在同一臺(tái)服務(wù)器上,而服務(wù)器的session數(shù)據(jù)不共享,可能導(dǎo)致要求用戶重復(fù)登錄的情況發(fā)生。解決這個(gè)問題的方案既可在前端請(qǐng)求分發(fā)做,也可在后端通過設(shè)置分布式共享session來實(shí)現(xiàn)。

以文件形式保存session數(shù)據(jù)的系統(tǒng)中,可以指定某個(gè)目錄為共享目錄,所有服務(wù)器的session都保存在該目錄下;以redis/memcache/db等方式存放session的系統(tǒng)中,配置連接到同一個(gè)session服務(wù)器即可做到session共享。以session共享方式搭建的系統(tǒng),前端負(fù)載均衡器可以隨意分發(fā)請(qǐng)求到任意服務(wù)器上。

您可能感興趣的文章:
  • PHP實(shí)現(xiàn)用session來實(shí)現(xiàn)記錄用戶登陸信息
  • PHP實(shí)現(xiàn)負(fù)載均衡session共享redis緩存操作示例
  • php中session垃圾回收機(jī)制
  • PHP實(shí)現(xiàn)負(fù)載均衡下的session共用功能
  • PHP實(shí)現(xiàn)分布式memcache設(shè)置web集群session同步的方法
  • PHP+Session防止表單重復(fù)提交的解決方法
  • redis 替代php文件存儲(chǔ)session的實(shí)例
  • 實(shí)現(xiàn)PHP中session存儲(chǔ)及刪除變量

標(biāo)簽:宜春 佛山 工商登記 澳門 深圳 宿遷 延安 常德

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP學(xué)習(xí)筆記之session》,本文關(guān)鍵詞  PHP,學(xué)習(xí),筆記,之,session,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP學(xué)習(xí)筆記之session》相關(guān)的同類信息!
  • 本頁收集關(guān)于PHP學(xué)習(xí)筆記之session的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章