2011-05-15 55 views
3

我對PHP很陌生,正在嘗試使用Cookie和會話。當Cookies被禁用時,會話數據不顯示

因此,在IE中,如果我將我的隱私設置設置爲阻止所有Cookie,顯然所有的Cookie都會被阻止,但是會話呢?

我問,因爲我的印象是,如果cookie被阻止但我開始一個會話,該會話應該是有效的。換句話說,無論我爲會話變量設置什麼,只要瀏覽器處於打開狀態,就應該使用瀏覽器,但這似乎沒有發生。

我的整個思維過程背後是我可以使用cookie作爲我的第一種跟蹤方式,除了設置cookie之外,我還可以設置會話以防止cookie被禁用。

所以問題1 - 爲什麼我的會話變量被阻止?這是否會發生? 問題2 - 設置cookie和會話(如果cookie被阻止)是否是好習慣?

回答

2

會話絕大部分只是一個鏈接到數據集的標識符,每個用戶。

該標識符幾乎總是以cookie的形式存儲。如果Cookie被禁用,會話cookie也是如此,會話也是如此。方法是在每個URL中包含會話ID,然後挑出它並使用它來初始化會話(即使用ID來查找存儲的會話數據)。

PHP 可以自動將會話ID添加到相對URI,它取決於配置選項。請參閱手冊中的「Passing the Session ID」。 (特別注意this comment。)

+0

非常感謝!這非常有幫助。 – Charlie 2011-05-16 00:18:35

1
  1. 會話未被阻止。但會話ID是每個請求更改。所以很顯然你沒有看到你的數據
  2. 它們被用於不同的事情。所以不能說這是好還是壞
2

儘管會話存儲在服務器端,服務器仍然需要跟蹤請求來自哪裏。爲了做到這一點,會話會在計算機上的Cookie中存儲唯一的ID。這樣做和簡單設置cookie的區別在於後者包含信息本身,而會話cookie僅用於識別您的請求。因此,禁用cookie將防止這種情況發生,因此您的會話變量可能不會被保留。

您可以使用無Cookie會話,通常只需將您的唯一ID附加到您發送的每個URL請求(這樣您的URL就會有一堆看似隨機的字母數字字符)。我不確定PHP是否支持這種方法。

只要信息不太敏感,或者希望他們長時間呆在用戶計算機上,就應該使用Cookie。會話更安全,即使Cookie可以加密,因爲數據存儲在服務器端。決定使用哪一個取決於你的要求,因爲每個人都有自己的優點和缺點。

+1

我記得幾年前在PHP上使用無Cookie會話,並且遇到了Google使用會話查詢字符串索引URL的問題 - 這意味着使用該鏈接的所有流量都將共享相同的會話數據。惡夢!搜索引擎可能足夠聰明,但現在不這樣做,但它仍然擔心:) – 2011-05-16 00:17:49

+0

我也喜歡使用cookie的會話。我認爲這是默認設置,並且您並不經常使用無Cookie會話。但是,如果你有*,以滿足那些關閉cookies的用戶,那裏有選擇。 – keyboardP 2011-05-16 00:19:48

+0

@James McCormack:爲了避免這樣的事情,有時候檢測蜘蛛並以不同的方式對待它們是一個想法。雖然很棘手。 – Orbling 2011-05-16 10:01:10