回覆列表
-
1 # 網路圈
-
2 # 網際網路活化石
答案:禁用Cookie, PHP session依然能使用
通常來說,Session預設是基於Cookie的。
在預設的PHP配置中,SessionID是需要儲存在Cookie中的,預設Cookie名為PHPSESSIONID,伺服器端依靠SessionID這個cookie來定位Session。
但是,Session還可以透過URL或FORM傳遞。
如果客戶端禁用了Cookie,那可以將session_id附帶在每個網址後面(包括POST)
GET http://www.xx.com/index.php?session_id=xxxxxPOST http://www.xx.com/post.php?session_id=xxxxx然後在每個頁面的開頭使用session_id($_GET["session_id"]),來強制指定當前session_id。
除了使用URL來傳遞sessionID,還能用LocalStorage+AJAX來傳遞sessionID。
問題的關鍵就在於:只要能儲存和傳遞sessionID,就能使用SESSION,cookies只是使用SESSION的方式之一
首先可以明確的告訴你,在PHP專案中即使禁用了Cookie,Session依舊是可以正常使用的,但需要做一些額外的處理。
Cookie和Session之間是有聯絡的,它們都是用來標識使用者會話狀態和儲存一些資料的,我們先來大致瞭解一下這兩者的區別。
1、儲存位置不同
Cookie是儲存於客戶端瀏覽器的,主要存放使用者非敏感的資訊;
Session是儲存於伺服器端的(記憶體中或硬碟中),可以存放使用者較為敏感的資訊;
2、資料儲存量不同
Cookie適合儲存小量資料,Session可存放大量資料。
3、安全性上
Cookie儲存在客戶端,所以安全性得不到保障,使用者可以偽造Cookie;Session較Cookie要安全。
上面說到了Cookie和Session的區別,那它們的聯絡是怎樣的呢?
其實,Session預設是基於Cookie的,Session中有個SessionID是儲存在客戶端Cookie中的。當用戶瀏覽器發出請求時,本地的Cookie會附在請求頭資訊中,伺服器端可以獲取到客戶端儲存的SessionID值,然後就能定位到伺服器端對應的Session。
所以說,如果直接禁用了客戶端Cookie,Session就無法正常使用,但此時我們可以手動將SessionID值傳遞給伺服器端,伺服器端用這個SessionID值就能正常操作Session了。PHP端設定SessionID使用內建函式即可,如:session_id($_GET["ssid"]);session_start();