回覆列表
  • 1 # 網路圈

    從事WEB開發的朋友都很清楚,Cookie和Session都是實現會話保持的技術方案。我們在實際專案開發過程中也經常會發現Session會話丟失的現象,最常見的例子就是:明明登入了後臺,但在很短的時間內重新整理頁面,又要求重新登入,這就是會話丟失的一種表現。

    像這種會話丟失現象的原因是啥呢?很大一部分是因為客戶端的Cookie失效導致的。

    Session和Cookie的關係

    對於Session和Cookie之間的區別相信大家都很清楚,但很多從事開發工作的朋友卻不知道這兩者之間的聯絡。我面試過不少WEB開發者,甚至還有四五年開發經驗的朋友都不清楚。

    簡單來說就是,Session和Cookie是搭配使用的,Session中的唯一識別符號(SessionID)是儲存在客戶端瀏覽器中的Cookie中的。如果客戶端的Cookie被禁用了,那Session工作也會異常的。因為SessionID無法保持下去,客戶端的每次請求又被當成了新使用者的請求。

    禁用Cookie後如何保障Session機制正常?

    因為Cookie是儲存在客戶端瀏覽器的,而且客戶端瀏覽器是允許使用者自行設定是否關閉Cookie的。所以對於WEB開發人員而言,一定要做好相容性處理,一般在專案開發中我們是這樣來處理Cookie和Session的。

    1、WEB前端判斷使用者瀏覽器的Cookie是否處於開啟狀態:

    可以透過前端JS程式碼來嘗試寫入Cookie,看是否正常,如果客戶端瀏覽器的Cookie是禁用狀態,那需要將伺服器端生成的SessionID以GET方式附加到每次請求中,比如這種形式:

    http://xxx.com/index.php?id=123&sessid=xxxxxxxx

    2、伺服器端接收GET傳參中的SessionID

    如果使用者GET請求中含有SessionID的傳參(如上面例子中的 sessid引數),那我們在伺服器端要獲取到這個傳參的值,然後以此值作為SessionID去尋找對應的Session即可。比如PHP語言可以透過session_id()函式來獲取、設定SessionID。

    3、客戶端友好頁面引導使用者去開啟Cookie

    若前期專案沒有做好這方面的相容性處理,而且改造起來代價很大,那我們可以在前端做個引導頁,如果Cookie是禁用狀態,則彈出此引導頁引導使用者開啟Cookie。

  • 中秋節和大豐收的關聯?
  • 怎麼樣理解所有歷史敘述在本質上都是對歷史的解釋?