php開發面試題---禁用cookie之后,如何使用session


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攻擊。

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM