說一下這2個的基本信息吧,2個統稱為會話,session存在於服務器端,cookie存在於用戶端。之前有人說過如果禁用了cookie那么session就使用不了了,可以說這是正確的,也可以說這是錯誤的。因為禁用了cookie,session_id就不能保存,而服務器正是根據session_id來判斷用戶的session,所以說這是正確的。經過測試,當我們禁用cookie時,刷新頁面session_id會改變,說明session_id是用cookie保存的。
解決cookie禁用然后引用session的方法。
1.
session.use_cookies = 0 //設置客戶端是否使用cookie來保存session值 該參數的值不影響上述機制的進行。
但是為了驗證該機制,這里把該參數設為0,排除cookie攜帶seesionid的可能
session.use_only_cookies = 0 //是否只使用cookie來保存session值 該參數為1時,上述機制失效。
設置session.use_trans_sid = 1或者編譯時打開打開了--enable-trans-sid選項
這樣他會在每個url后面自動加上PHPSESSID的值,然后正常使用session就可以了。
2.
在url后面加上session_id的值或者保存session_id的值於數據庫或redis中,然后在下一次要調用session前,運行session_id($session_id),還有這條語句要在session_start()前。
目前我了解到的只有這兩種方法可以解決。
然后我再聊下session_id吧,它是保存在cookie中,首先session是一個只要活動就不會過期的東西,只要開啟cookie,每一次會話,session_id都不會改變,我們可以根據session_id來判斷用戶是否是正常登陸,防止用戶偽造session。然后我們也要防止session被劫持,我們可以對session_id進行再一次的加密,防止暴力破解,還有可以設置HttpOnly。通過設置Cookie的HttpOnly為true,可以防止客戶端腳本訪問這個Cookie,從而有效的防止XSS攻擊。
