【面試題】Cookie&Session
【面試題】Cookie&Session
什麼是Cookie
Cookie實際上是一小段的文字資訊。客戶端請求伺服器,如果伺服器需要記錄該使用者的狀態,就使用response向客戶端瀏覽器辦法一個cookie。客戶端瀏覽器會把cookie儲存起來。當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給伺服器,伺服器檢查該cookie,以此來辨認使用者狀態,伺服器還可以根據需要修改cookie的內容。
Cookie機制
在程式中,會話跟蹤是很重要的事情。理論上,一個使用者的所有請求操作都應該屬於同一個會話,而另一個使用者的所有請求操作則應該屬於另一個會話,二者不能混淆。例如,使用者A在超市購買的任何商品都應該放在A的購物車內,不論是使用者A什麼時間購買的,這都是屬於同一個會話的,不能放入使用者B或使用者C的購物車內,這不屬於同一個會話。而web應用程式是使用HTTP協議傳輸資料的,HTTP協議是無狀態的協議。一旦資料交換完畢,客戶端與伺服器端的連線就會關閉,再次交換資料需要建立新的連線,這就意味著伺服器無法從連線上跟蹤會話,即使用者A購買了一件商品放入購物車內,當再次購買商品時伺服器已經無法判斷該購買行為是屬於使用者A的會話還是使用者B的會話了,要跟蹤該會話,必須引入一種機制,Cookie就是這樣的一種機制,它可以彌補HTTP協議無狀態的不足,在Session出現之前,基本上所有的網站都採用Cookie來跟蹤會話。
什麼是Session
Session是另一種記錄客戶狀態的機制,不同的是Cookie儲存在客戶端瀏覽器中,而Session儲存在伺服器上。客戶端瀏覽器訪問伺服器的時候,伺服器把客戶端資訊以某種形式記錄在伺服器上,這就是Session。客戶端瀏覽器再次訪問時只需要從該Session中查詢該客戶的狀態就可以了。如果說Cookie機制是通過檢查客戶身上的通行證來確定客戶身份的話,那麼Session機制就是通過檢查伺服器上的客戶明細表來確認客戶身份。Session相當於程式在伺服器上建立的一份客戶檔案,客戶來訪的時候只需要查詢客戶檔案表就可以了。
Session機制
除了使用Cookie,web應用程式中還經常使用Session來記錄客戶端狀態。Session是伺服器端使用的一種記錄客戶端狀態的機制,使用上比Cookie簡單一些,相應的也增加了伺服器的儲存壓力。
如何利用Cookie實現自動登入
當用戶在某個網站註冊後就會收到一個唯一使用者ID的Cookie.客戶後來重新連線時,這個使用者ID會自動返回,伺服器對它進行檢查,確定它是否為註冊使用者且選擇了自動登入,從而使使用者無需給出明確的使用者名稱和密碼,就可以訪問伺服器上的資源。
儲存Session id有幾種方法
儲存session id的方式可以採用cookie,這樣在互動過程中瀏覽器可以自動地按照規則把這個標識傳送給伺服器。
由於cookie可以被人為禁止,必須有其他的機制以便在cookie被禁止的時候仍然能夠把Session id傳遞會伺服器,經常採用的一種技術叫做URL重寫,就是把session id附加在URL路徑的後面,附加的方式也有兩種,一種是作為URL路徑的附加資訊,另一種是作為查詢字串附加在URL後面。網路在整個互動過程張總始終保持狀態,就必須在每個客戶端可能請求的路徑後面都包含這個session id。
另一種技術叫做表單隱藏欄位。就是伺服器會自動修改表單,新增一個隱藏欄位,以便在表單提交時能夠把session id傳遞迴伺服器。
session什麼時候被建立
一個常見的錯誤就是以為session在有客戶端訪問時就被建立,然而事實是直到某server端程式(如servlet)呼叫HttpServletRequest.getSession(true)這樣的語句時才會被建立。
Session什麼時候被刪除
程式呼叫HttpSession.invalidate()。
距離上一次收到客戶端傳送的session id時間間隔超過了session的最大有效時間。
伺服器程序被停止。
注意:關閉瀏覽器只會使儲存在客戶端瀏覽器記憶體中的session cookie失效,不會使伺服器端的session物件失效。
cookie機制和session機制的區別
具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。同時我們也看到,由於在伺服器端保持狀態的方案在客戶端也需要儲存一個標識,所以session機制可能需要藉助於cookie機制來達到儲存標識的目的,但實際上還有其他選擇。
相關推薦
【面試題】Cookie&Session
【面試題】Cookie&Session 什麼是Cookie Cookie實際上是一小段的文字資訊。客戶端請求伺服器,如果伺服器需要記錄該使用者的狀態,就使用response向客戶端瀏覽器辦法一個cookie。客戶端瀏覽器會把cookie儲存起來
【面試題】Python高級開發工程師面試題
http ges log com .com blog mage 回復 image 線上面試題,有空整理答案,歡迎大家回復答案 【面試題】Python高級開發工程師面試題
【面試題】LRU算法及編碼實現LRU策略緩存
max 防止 技術分享 nbsp pri value 概念 閾值 使用 概念 LRU(least recently used)就是將最近不被訪問的數據給淘汰掉,LRU基於一種假設:認為最近使用過的數據將來被使用的概率也大,最近沒有被訪問的數據將來被使用的概率比較低。
【面試題】2018年最全Java面試通關秘籍第五套!
XA 中文分詞 coo div rop 為什麽 3.2 自旋 FQ 【面試題】2018年最全Java面試通關秘籍第五套! 原創 2018-04-26 徐劉根 Java後端技術 第一套:《2018年最全Java面試通關秘籍第一套!》 第二套:《2018年最全Java面試通
【面試題】Java面試題--基礎總結--個人學習記錄
1、Java執行緒的狀態 新建new:新建立一個執行緒物件。 就緒runnable:建立執行緒物件後呼叫start方法,此時執行緒進入可執行狀態,等待CPU的時間片,且其他所需資源已獲得。 執行running(一般不考慮這種狀態):執行緒分得CPU的時間片、資源後執行執行緒。 阻塞b
【面試題】Java面試題--技術框架--個人學習記錄
1、看過哪些開源框架的原始碼 2、為什麼要用Redis,Redis有哪些優缺點?Redis如何實現擴容? 3、Netty是如何使用執行緒池的,為什麼這麼使用 4、為什麼要使用Spring,Spring的優缺點有哪些 &
【面試題】Java面試題--技術深度--個人學習記錄
1、有沒有看過JDK原始碼,看過的類實現原理是什麼。 2、HTTP協議 TCP詳解 關於http協議 3、TCP協議 TCP詳解 關於http協議 4、一致性Hash演算法 5、JVM如何載入位元組碼檔案 loa
【面試題】Java 2個(多個)大整數相加如何實現
之前面試阿里的時候,第四面的時候面試官讓我當他面實現這個題目, 一開始的時候問的時候 2個相加如何實現,然後我寫完了之後又問我如果是多個相加呢?面試官希望我能在實現的時候能夠考慮到各種可能性,比如多個數相加,然後等我寫完了之後,又問我有沒有更好的實現方法;以下是我的實現方法; 將待相加
【面試題】多執行緒在執行過程中,某個執行緒執行時,突然釋放鎖。會發生的特殊狀態
一,背景 今天在刷面試題的時候,做到一道面試題,雖然看了答案,但有一個答案還是不理解。後來研究了一下,得到結論:執行緒拿到鎖進行執行時,哪怕獲得了CPU執行權,但是那個鎖不能丟失,它後面執行的過程都需要帶著鎖,才能往下繼續執行。 二,測試程式碼 /**
【面試題】同學的面經
汽車之家 1、訪問修飾符有哪幾種?有什麼的區別? 2、面向物件三大特性?在開發中怎麼體現? 3、redis有哪些資料型別? 4、資料庫索引瞭解過嗎? 5、spring mvc 一個請求的處理過程是怎麼樣的? 6、List有那些型別,內部由什麼構成? 7、從上一家公司離職的原因是什麼? 8、什麼時候能入職? 汽
【面試題】求連結串列的環入口點
環入口點:我們設A是連結串列的起點,B是環的入口點,C是環內快慢指標的相遇點。兩個快慢指標定義為slow和fast. slow走的路程:A->B->C; fast走的路程:A->B->C->B->C; 2*(x+y)=x+y+z+y
【面試題】KMP演算法實現
what!? KMP演算法是幹嘛的? 我們可能都知道樸素演算法,主要是解決兩個字串的匹配問題,其實KMP演算法可以說和樸素演算法是師出同門,為什麼這麼講呢?首先我們對比一下兩個的程式碼,大家就知道怎麼回事了。 樸素演算法 int BF(const char *str1
【面試題】兩個佇列實現一個棧
題目:用佇列來實現棧。 用兩個佇列來回倒騰基本就可以了,假設有兩個佇列A、B,初始都為空,將元素放入佇列A中,如果佇列B不為空,將B中的元素全部取出放入A中,這樣B就為空隊列了,然後下次加入元素就加入
【面試題】給多個無序正整數,求中位數
題目:給你很多很多正整數,但它們是無序的,找出它們的中位數。 最開始就想說使用快排,先將這些整數進行排序,然後找到中位數,但又想到可能不是面試官想要的答案,於是又採用了其他方法,最終也沒完全解決出來。 【經驗總結:當面試官問了一個演算法題後,如果想不到優化一點的方法,就先
【面試題】Java三大特性封裝繼承多型總結
本文內容總結於多篇部落格,參考到的地方在文中都會一一列出 http://www.cnblogs.com/ibalintha/p/3897821.html 1.封裝 封裝的定義: 首先是抽象,把事物抽象成一個類,其次才是封裝,
【面試題】棋盤走法總數問題
題目:給定一個mxn的棋盤,每次只能向右或向下走,從左上角走到右下角,有多少中走法? 思路:可以使用動態規劃,狀態轉移方程為:dp[m][n]=dp[m-1][n]+dp[m][n-1],也可以使用遞
【面試題】leetcode62:Unique Paths
瓜子面試題 思路:動態規劃求解即可。 程式碼: public class UniquePaths62 { public static void main(String[] args) {
【面試題】資料庫索引及B樹、B+樹詳解
最近準備找一個實習,所以接下來,會通過其他人分享的面經陸續的總結面試中經常遇到的題 今天是關於資料庫索引,以及具體的實現(B樹及B+樹) 本文參考自兩篇部落格(個人認為是最好的相關部落格了) 資料庫索引部分:http://blog.csdn.net/weilianglian
【面試題】JavaSE基礎常見面試題
基礎部分 1.Java語言的特性? 跨平臺性、面向物件、安全性、多執行緒、簡單易用。 2.& 和 && 的區別? &運算子表示按位與、邏輯與,而&&運算子是短路與運算。 3.String是最基本的資料
【面試題】JVM相關
1.堆和棧的區別 棧記憶體是儲存方法幀和區域性變數(基本型別的變數、物件的引用變數),方法呼叫完後會釋放該棧及棧中變數。存取速度比堆要快,僅次於暫存器,棧資料可以共享,多個引用可以指向同一個地址,存