php session 机制,Cookie、Session机制详解及PHP中Session处理
會話機制
Cookie/Session:
在web應用中,常用的會話追蹤機制是Cookie和Session。而Cookie是通過在瀏覽器里記錄確定用戶身份,Session在服務器端記錄信息確定用戶身份。
Http協議:
http協議本身是無狀態的,也就是說我們無法通過http協議來確定該次請求的用戶身份,所以,通常的做法是需要通過Cookie和Session機制確定會話用戶身份。
Cookie
簡介:
Cookie是存儲在客戶端的,用來記錄信息。其實單純來說,僅采用Cookie也是可以追蹤用戶會話,只是這樣安全性會大大降低(例如:最粗暴的將用戶登錄的用戶名、密碼寫入cookie,每次請求驗證用戶名密碼,根據驗證結果決定是否允許進行接下來的業務處理)。
Cookie創建及如何發送給客戶端:
cookie創建:cookie由服務端創建(也就是服務端決定要往cookie寫入什么內容)。在PHP中,當setCookie函數執行后,默認會將cookie寫入到客戶端中。
setCookie('name', 'nameValue');
echo 'success';
當在瀏覽器中執行上述代碼時,會將cookie寫入到瀏覽器中。
Cookie使用:
cookie一般是在登錄成功后,完成寫入,將其返回給客戶端。客戶端下次請
求時會帶入cookie,服務端通過獲取cookie內容進行驗證會話信息。
Cookie有效期及跨域問題:
cookie是可以設置有效期的,默認是瀏覽器關閉時,cookie自動失效。
cookie存在跨域問題(瀏覽器同源策略保護),例如,childB.B.com和Child2B.B.com雖然都在一級域名B.com下,但是由于二級域名不同,所以cookie也無法在Child2B.B.com下使用(這也是為什么前后端分離項目中,不采用cookie、session機制的原因)。
跨域問題解決:
跨域問題可以通過在服務端設置允許cookie訪問的域名或在nginx中配置允許跨域域名Cookie跨域解決方案
header('Access-Control-Allow-Origin: Child2B.B.com');
header('Access-Control-Allow-Credentials: true');
Session:
簡介:
在服務端保存用戶信息,追蹤用戶的會話記錄。
原理分析:
當瀏覽器通過http協議請求服務端時,服務端會為用戶創建session。在創建session時,會檢查是否包含一個唯一的會話id,即sessionId。
(1)若有該sessionId,則表示已經為用戶創建過會話,通過sessionId從session中獲取用戶信息,執行下面的業務處理;
(2)若沒有該sessionId,則表示還未創建過會話,服務端會創建session,為該session關聯唯一的sessionId,將sessionId返回客戶端。
通常情況下,session會和cookie配合使用,即將session生成的sessionId通過cookie寫入瀏覽器。瀏覽器在下次請求時,帶入cookie,服務端通過cookie獲取sessionId,進而獲取session信息。
禁用cookie的sessionId Url重寫:
當瀏覽器禁用cookie時,是沒法通過cookie帶入sessionId的,可以通過將sessionId附著在url中傳入服務端。
在PHP中當php.ini中的session.use_trans_sid = 1時,若瀏覽器禁用cookie會自動將sessionId附著在url上進行傳遞。
PHP對session的處理方式:
PHP默認通過文件的形式存儲session,即生成sessionId時,相應服務器也會生成一個sess_sessionId的文件,在該文件中會存儲session信息。
PHP支持通過session_set_save_handler()函數設置支持的session驅動session_set_save_handler()函數,要求自定義的session處理類需要實現SessionHandlerInterface接口(或者是已經實現了該接口的sessionHandler)。
例如:在tp5中,實現了三種驅動方式:redis/memcache/memcached。
會話機制小結:
總得來說,由于http協議的無狀態,所以需要單獨的會話追蹤機制來保持用戶會話,session是在服務端存儲用戶信息追蹤會話,cookie是在客戶端存儲用戶信息。session在服務端生成sessionId,通常做法是需要通過瀏覽器cookie來存儲,配合使用來確定用戶會話信息。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的php session 机制,Cookie、Session机制详解及PHP中Session处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浦发美团点评信用卡申请条件
- 下一篇: 男子称网购稻香村糕点发现活蟑螂:很恶心