php開發面試題---禁用cookie之后,如何使用session
一、總結
一句話總結:
在每個url后面自動加上PHPSESSID的值即可,用戶禁止cookie后,服務器仍會將sessionId以cookie的方式發送給瀏覽器
1、用戶禁止cookie后,服務器的sessionId還會發給用戶么?
會:服務器仍會將sessionId以cookie的方式發送給瀏覽器,但是,瀏覽器不再保存這個cookie(即sessionId)了。
2、如何設置才能在每個url后加上sessionId的值?
設置session.use_trans_sid = 1或者編譯時打開打開了--enable-trans-sid選項
這樣他會在每個url后面自動加上PHPSESSID的值,然后正常使用session就可以了。
3、session的生命周期中特別注意的?
只要活動就不會過期:session是一個只要活動就不會過期的東西,只要開啟cookie,每一次會話,session_id都不會改變
二、禁用cookie后如何使用session還有session_id的使用
參考或轉自:禁用cookie后如何使用session還有session_id的使用 - 方方土zekeny - 博客園
https://www.cnblogs.com/zekeny/p/6708152.html
(1)如果用戶禁止cookie,服務器仍會將sessionId以cookie的方式發送給瀏覽器,但是,瀏覽器不再保存這個cookie(即sessionId)了。
(2)如果想繼續使用session,需要采取其他方式來實現sessionId的跟蹤。
可以使用url重寫來實現sessionId的跟蹤。
(3)url重寫
a,什么是URL重寫
瀏覽器在訪問服務器上的某個地址時,不能夠直接寫這個組件的地址,而應該使用服務器生成的這個地址。
比如,
<a href="some">someServlet</a> error
<a href-"<%=response.encodeURL("some")%>"></a>
encodeURL方法會在"some"后面添加sessionId。
b,如何進行url重寫。
//encodeURL方法用在鏈接地址、表單提交地址。
response.encodeURL(String url);
//encodeRedirectURL方法用於重定向地址。
response.encodeRedirectURL(String url);
三、用戶禁止cookie后,如何繼續使用session
參考或轉自:用戶禁止cookie后,如何繼續使用session - 龍騰四海365的專欄 - CSDN博客
https://blog.csdn.net/u011637069/article/details/49870497
說一下這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攻擊。