這篇文章主要介紹“PHP中的session有什么作用”,在日常操作中,相信很多人在PHP中的session有什么作用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”PHP中的session有什么作用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
創新互聯建站堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站建設、網站建設、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的橫峰網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!cookie和session是web開發新手容易搞混的兩個概念,弄清楚兩者有助于對web交互更好的理解。個人認為session和cookie的區別主要有如下幾點:
cookie
信息保存在客戶端
具體實現由客戶端負責
數據大小和數量一般有限制
數據容易被竊取和篡改
session
數據保存在服務端
具體實現由服務器負責
數據大小和數量原則上無限制
安全性較高,可信度強
狹義的session指的是web會話中的session id以及關聯的數據,廣義的session指通信雙方的交互會話。例如用戶登錄是一次session交互,在ATM機取錢是一次session交互,等等。
session的細節
session的主要作用是標識一個會話,并保存會話期間的數據。以下是session的一些細節。
存取
PHP通過$_SESSION超全局變量獲取和存放session中的所有數據。$_SESSION是一個數組,可以方便的進行賦值和讀取,例如:
$name = $_SESSION['NAME']; // 讀取session中的name值 $_SESSION['NAME'] = 'new name'; // 賦新值 unset($_SESSION['NAME']); // 移除session中的值
過期時間
默認session中的數據有可能在session超時后被移除,這取決于PHP是否及時運行垃圾回收。由于PHP運行垃圾回收的系數是請求數,帶來的后果是:1. 低流量的站點超時很久后session數據也未被移除; 2. 大流量站點頻繁的進行session垃圾回收; 3. 運行垃圾回收在執行用戶請求前,遇到了運行垃圾回收的用戶可能會感受到系統延遲。一個更好的解決辦法是禁用PHP的默認垃圾回收,以cron任務定時執行session_gc函數。這樣既保證session的時效性,也能帶來性能和用戶體驗上的提升。
手動移除session中的數據可以用unset移除單個數據項,或者session_destroy函數暴力刪除所有的數據。
存儲介質和序列化
session中的數據默認以文件形式保存在磁盤上,session打開時讀取文件內容反序列化,然后填充$_SESSION數組。在大流量的站點中,存放session文件的目錄下會包含大量小文件,將對文件系統造成沉重的IO負擔。
session模塊中的handler可以指定數據保存方式,例如存放到數據庫中、redis/memcache等介質中。PHP內置的handler包括files(默認),redis和memcache。用戶可以通過session_set_save_handler來注冊自己的handler。
session中存放的數據可能是字符串等基本類型,也可能是數組、對象等復雜類型。session設置中的serialize_handler用來設置序列化和反序列化的handler,hanlder將數據序列化后,在交給save_handler保存。由序列化可知,resource等類型不能也不應該保存到session中。把一個db的連接句柄保存到session中,然后10分鐘后再取出來用,這樣的想法應該盡快拋掉。
session設置名稱
由于http是無狀態協議,客戶端請求時需要攜帶session id才能讓服務端區分出session。默認的標識session id的名稱是PHPSESSID,可以使用session_name來設置其他的名稱。例如為了防止攻擊者猜出后端是PHP語言的系統,可以設置session id的名稱為JSESSIONID,迷惑攻擊者。
session自動開啟
目前主流的PHP版本默認都不會自動開啟session。例如某個訪客就隨便看一下頁面就離開,如果自動開啟session,將進行一系列的初始化操作后將session id發送到客戶端,以便下次訪問時能識別出用戶。對于一次性的訪客,或者非系統的登錄用戶,這些操作只會帶來額外的開銷。
session不自動開啟的劣勢是使用session前,要確保session已經打開,否則可能取到空數據。如果重命名了默認的session名稱,需要在session_start前調用session_name指示目前使用的session名稱。
分布式session
大流量的站點,后端提供服務的往往不止一臺PHP服務器。如果用戶的多次請求不是落在同一臺服務器上,而服務器的session數據不共享,可能導致要求用戶重復登錄的情況發生。解決這個問題的方案既可在前端請求分發做,也可在后端通過設置分布式共享session來實現。
以文件形式保存session數據的系統中,可以指定某個目錄為共享目錄,所有服務器的session都保存在該目錄下;以redis/memcache/db等方式存放session的系統中,配置連接到同一個session服務器即可做到session共享。以session共享方式搭建的系統,前端負載均衡器可以隨意分發請求到任意服務器上。
到此,關于“PHP中的session有什么作用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注創新互聯網站,小編會繼續努力為大家帶來更多實用的文章!
網頁標題:PHP中的session有什么作用-創新互聯
分享鏈接:http://vcdvsql.cn/article16/ddpsdg.html
成都網站建設公司_創新互聯,為您提供App開發、品牌網站制作、電子商務、網站設計、虛擬主機、商城網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯