2012-11-08 143 views
-1

Cookie允許您的應用程序在Web客戶端上存儲少量文本數據(通常爲 4-6kB)。 cookie的使用方式有很多,儘管 最常用的是維護會話狀態.Cookies通常由服務器使用響應頭設置,隨後由客戶端作爲請求頭提供。Cookie如何保持會話狀態?

這是來自zce學習指南。

我的問題是

1. how a session state is maintained by cookie? 
2. what happens to these cookies when we use session_destroy()? 
+5

這是很好覆蓋的手冊:http://php.net/manual/en/features.cookies.php –

+0

+1針對上述評論,你真的應該剛纔搜索。 – freshnode

回答

1

簡而言之,當您瀏覽指定網站時,會話cookie將遠程會話與您的瀏覽器綁定。它包含一個通常沿着PHPSESSID=3432DFGDFG43523行的字符串,遠程服務器將其標識爲它正在管理的會話。

從PHP網站:

訪問者訪問你的網站被分配一個唯一的ID,在 所謂的會話ID。這可以存儲在用戶 一側的cookie中或者在URL中傳播。

會話支持允許您在$ _SESSION超全局數組中的請求之間存儲數據。當訪問者訪問您的站點時,PHP 將自動檢查(如果session.auto_start設置爲1)或 您的請求(明確地通過session_start()或通過 session_register())隱式地檢查特定會話ID是否已經發送 請求。如果是這種情況,則先前保存的環境是 重新創建。

http://www.php.net/manual/en/intro.session.php

session_destroy()被調用時,它並不完全表現爲你所期望的。會話被遠程銷燬,但本地cookie不會被刪除。要做到這一點,你需要打電話setcookie(<session cookie name>)與消極的日期在客戶端銷燬它。再次,從PHP網站:

session_destroy()銷燬所有與當前的 會話相關的數據。它不會取消設置任何與會話相關的全局變量,也不會取消設置會話Cookie。要再次使用會話變量 ,必須調用session_start()。

爲了完全消除會話,例如將用戶登錄出去,還必須取消設置會話ID。如果使用cookie傳播會話ID(默認行爲),那麼會話cookie必須被刪除,其中 。 setcookie()可用於此目的。

http://www.php.net/manual/en/function.session-destroy.php

+0

因此,當我們請求一個頁面時,所有這些cookies將通過請求標頭髮送到服務器中 –

+0

這是正確的。 – freshnode

1

非常短:

會話ID創建被髮送到客戶端上的每個請求,這是存儲在一個通常被稱爲PHPSESSID的cookie。客戶端用這個會話ID來響應,告訴服務器它屬於哪個會話。

session_destroy只會取消數據,而不是身份。因此,使用該方法不會觸及cookie。

+0

所以當我們請求一個頁面時,所有的cookies都會通過請求頭髮送到服務器 –

+0

只有標識符而不是cookies。 :) – Undrium