如果cookie禁用了,session還能用嗎,為什麼
回複內容:
如果cookie禁用了,session還能用嗎,為什麼
常見的session實現方式是基於cookie的, 所以禁用cookie,session隨之時效
理論上只要在返回的頁面裡裡能帶上一個標識會話的令牌,在瀏覽器下一次提交的時候,能帶上這個令牌,會話就可以被保持
因此,cookie只是最優雅的實現session的方式,因為cookie對使用者來說不可見,同時會自動在HTTP報文中傳輸
但session也可以通過其他方式來保持, 比如放一個sessionId在URL的參數裡 :)
形象的給你描述下這個問題:
http請求是無狀態的。。假如你是瀏覽器,我是伺服器,那麼類似你知道我的電話號碼,可以給我打電話,但是我不知道你的電話號碼,我想和你說話只能等你跟我打。。
那麼問題來了,如果你想讓我相信你就是昨天給我打電話的那個人必須藉助一個新的東西,比如你給我打電話的時候我給你一串數字,你下次打給我告訴我這串數字我就知道你是誰了,這串數字在我這裡存的就叫session(可以簡單這麼理解),你自己也存了一份,那份叫cookie。你以後給我打電話順便把這個cookie給我就可以了。這個就是session和cookie的原理。
所以了,假如你要禁用cookie,通過cookie把那串數字給我就不行了。那你也可以把這串數字放在url後面給我,或者放到form表單裡給我,那也是可以的。
恩,就是這樣了。。不知道你有沒有理解。。
http://segmentfault.com/a/1190000003012552
通常情況下 Cookie 裡記錄了 Session 的 id ,所有 Cookie 被禁用了也就意味著 Session 失效了。不過 Session id 還有另外一種傳遞方式,就是在 URL 查詢中攜帶 Session id (既把所有的URL裡都帶上Session id的參數,如: http://xxx/index?sid=...)。不夠這種方法比較麻煩(所有的連結都要帶上),而且比較容易丟失 Session id(地址可以認為修改去掉ID),所有只是作為備選方案,在 Cookie 不能使用的環境下可以作為替代。
在php裡面,session_id是每個會話的唯一id,它預設被儲存到cookie中,請求時,根據cookie裡面的session_id來識別會話。
但可通過trans_sid設定(在編譯時間或php.ini)檔案中,對其進行修改。修改後,session_id能脫離cookie而存在,不同點在於,使用cookie時,從cookie中擷取session_id,而不使用cookie時,session_id會跟在url後面(PHP自動幹這事情)
禁用了cookie的話,會使用url重寫的方式。session任然可以使用
https://www.zhihu.com/question/19786827/answer/21643186