cookie機制和session機制的區(qū)別_第1頁
cookie機制和session機制的區(qū)別_第2頁
cookie機制和session機制的區(qū)別_第3頁
cookie機制和session機制的區(qū)別_第4頁
cookie機制和session機制的區(qū)別_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、、cookie機制和session機制的區(qū)別*具體來說cookie機制采用的是在客戶端保持狀態(tài)的方案,而session機制采用的是在服務 器端保持狀態(tài)的方案。同時我們也看到,由于才服務器端保持狀態(tài)的方案在客戶端也需要保存一個標識,所以session機制可能需要借助于cookie機制來達到保存標識的目的,但實際上還有其他選擇*二、會話cookie和持久cookie的區(qū)別*如果不設置過期時間,則表示這個cookie生命周期為瀏覽器會話期間,只要關(guān)閉瀏覽器窗 口,cookie就消失了。這種生命期為瀏覽會話期的cookie被稱為會話cookie。會話cookie 一般不保存在硬盤上而是保存在內(nèi)存里。如

2、果設置了過期時間,瀏覽器就會把cookie保存到硬盤上,關(guān)閉后再次打開瀏覽器, 這些cookie依然有效直到超過設定的過期時間。存儲在硬盤上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對于保 存在內(nèi)存的cookie,不同的瀏覽器有不同的處理方式。*三、如何利用實現(xiàn)自動登錄*當用戶在某個網(wǎng)站注冊后,就會收到一個惟一用戶ID的cookie??蛻艉髞碇匦逻B接時, 這個用戶ID會自動返回,服務器對它進行檢查,確定它是否為注冊用戶且選擇了自動登錄,從 而使用戶務需給出明確的用戶名和密碼,就可以訪問服務器上的資源。*四、如何根據(jù)用戶的愛好定制站點*網(wǎng)站可以使用cookie記錄用戶的意愿

3、。對于簡單的設置,網(wǎng)站可以直接將頁面的設置 存儲在cookie中完成定制。然而對于更復雜的定制,網(wǎng)站只需僅將一個惟一的標識符發(fā)送 給用戶,由服務器端的數(shù)據(jù)庫存儲每個標識符對應的頁面設置。*五、cookie的發(fā)送*創(chuàng)建Cookie對象設置最大時效將Cookie放入到HTTP響應報頭如果你創(chuàng)建了一個cookie,并將他發(fā)送到瀏覽器,默認情況下它是一個會話級別的cookie: 存儲在瀏覽器的內(nèi)存中,用戶退出瀏覽器之后被刪除。如果你希望瀏覽器將該cookie存儲 在磁盤上,則需要使用maxAge,并給出一個以秒為單位的時間。將最大時效設為0則是命令瀏覽器刪除該 cookie o發(fā)送cookie需要使用

4、HttpServletResponse的addCookie方法,將cookie插入到一個 Set-Cookie HTTP請求報頭中。由于這個方法并不修改任何之前指定的Set-Cookie報頭, 而是創(chuàng)建新的報頭,因此我們將這個方法稱為是addCookie,而非setCookie。同樣要記住 響應報頭必須在任何文檔內(nèi)容發(fā)送到客戶端之前設置。六、cookie的讀取*調(diào)用 request.getCookie要獲取有瀏覽器發(fā)送來的cookie,需要調(diào)用HttpServletRequest的getCookies方法,這個 調(diào)用返回Cookie對象的數(shù)組,對應由HTTP請求中Cookie報頭輸入的值。對數(shù)

5、組進行循環(huán),調(diào)用每個cookie的getName方法,直到找到感興趣的cookie為止cookie與你的主機(域)相關(guān),而非你的servlet或JSP頁面。因而,盡管你的servlet可能 只發(fā)送了單個cookie,你也可能會得到許多不相關(guān)的cookieo例如:String cookieName = userID”;Cookie cookies = request.getCookies();if (cookies!=null)for(int i=0;icookies.length;i+)Cookie cookie = cookiesi;if (cookieName.equals(cookie.

6、getName() doSomethingWith(cookie.getValue();*七、如何使用cookie檢測初訪者*調(diào)用 HttpServletRequest.getCookies()獲取 Cookie 數(shù)組在循環(huán)中檢索指定名字的cookie是否存在以及對應的值是否正確如果是則退出循環(huán)并設置區(qū)別標識根據(jù)區(qū)別標識判斷用戶是否為初訪者從而進行不同的操作*八、使用cookie檢測初訪者的常見錯誤*不能僅僅因為cookie數(shù)組中不存在在特定的數(shù)據(jù)項就認為用戶是個初訪者。如果cookie數(shù) 組為null,客戶可能是一個初訪者,也可能是由于用戶將cookie刪除或禁用造成的結(jié)果。 但是,如果數(shù)組

7、非null,也不過是顯示客戶曾經(jīng)到過你的網(wǎng)站或域,并不能說明他們曾經(jīng)訪 問過你的servlet。其它servlet、JSP頁面以及非Java Web應用都可以設置cookie,依據(jù) 路徑的設置,其中的任何cookie都有可能返回給用戶的瀏覽器。正確的做法是判斷cookie數(shù)組是否為空且是否存在指定的Cookie對象且值正確。*九、使用cookie屬性的注意問題*屬性是從服務器發(fā)送到瀏覽器的報頭的一部分;但它們不屬于由瀏覽器返回給服務器的 報頭。因此除了名稱和值之外,cookie屬性只適用于從服務器輸出到客戶端的cookie;服務 器端來自于瀏覽器的cookie并沒有設置這些屬性。因而不要期望通

8、過request.getCookies得到的cookie中可以使用這個屬性。這意味著, 你不能僅僅通過設置cookie的最大時效,發(fā)出它,在隨后的輸入數(shù)組中查找適當?shù)腸ookie, 讀取它的值,修改它并將它存回Cookie,從而實現(xiàn)不斷改變的cookie值。*十、如何使用cookie記錄各個用戶的訪問計數(shù)*獲取cookie數(shù)組中專門用于統(tǒng)計用戶訪問次數(shù)的cookie的值將值轉(zhuǎn)換成int型將值加1并用原來的名稱重新創(chuàng)建一個Cookie對象重新設置最大時效將新的cookie輸出*十一、session在不同環(huán)境下的不同含義*session,中文經(jīng)常翻譯為會話,其本來的含義是指有始有終的一系列動作消息

9、,比如打電 話是從拿起電話撥號到掛斷電話這中間的一系列過程可以稱之為一個session。然而當session 一詞與網(wǎng)絡協(xié)議相關(guān)聯(lián)時,它又往往隱含了“面向連接”和/或“保持狀態(tài)”這樣 兩個含義。session在Web開發(fā)環(huán)境下的語義又有了新的擴展,它的含義是指一類用來在客戶端 與服務器端之間保持狀態(tài)的解決方案。有時候Session也用來指這種解決方案的存儲結(jié)構(gòu)。*十二、session的機制*session機制是一種服務器端的機制,服務器使用一種類似于散列表的結(jié)構(gòu)(也可能就是 使用散列表)來保存信息。但程序需要為某個客戶端的請求創(chuàng)建一個session的時候,服務器首先檢查這個客戶端的請 求里是否

10、包含了一個session標識一稱為session id,如果已經(jīng)包含一個session id則說明以 前已經(jīng)為此客戶創(chuàng)建過session,服務器就按照session id把這個session檢索出來使用(如 果檢索不到,可能會新建一個,這種情況可能出現(xiàn)在服務端已經(jīng)刪除了該用戶對應的session 對象,但用戶人為地在請求的URL后面附加上一個JSESSION的參數(shù))。如果客戶請求不包含session id,則為此客戶創(chuàng)建一個session并且生成一個與此session 相關(guān)聯(lián)的session id,這個session id將在本次響應中返回給客戶端保存。* 十三、保存session id的幾種

11、方式*保存session id的方式可以采用cookie,這樣在交互過程中瀏覽器可以自動的按照規(guī)則 把這個標識發(fā)送給服務器。由于cookie可以被人為的禁止,必須有其它的機制以便在cookie被禁止時仍然能夠把 session id傳遞回服務器,經(jīng)常采用的一種技術(shù)叫做URL重寫,就是把session id附加在 URL路徑的后面,附加的方式也有兩種,一種是作為URL路徑的附加信息,另一種是作為 查詢字符串附加在URL后面。網(wǎng)絡在整個交互過程中始終保持狀態(tài),就必須在每個客戶端 可能請求的路徑后面都包含這個session id0另一種技術(shù)叫做表單隱藏字段。就是服務器會自動修改表單,添加一個隱藏字段

12、,以便 在表單提交時能夠把session id傳遞回服務器。*十四、session什么時候被創(chuàng)建*一個常見的錯誤是以為session在有客戶端訪問時就被創(chuàng)建,然而事實是直到某server端 程序(如Servlet)調(diào)用HttpServletRequest.getSession(true)這樣的語句時才會被創(chuàng)建。*十五、session何時被刪除*session在下列情況下被刪除:程序調(diào)用 HttpSession.invalidate()距離上一次收到客戶端發(fā)送的session id時間間隔超過了 session的最大有效時間服務器進程被停止再次注意關(guān)閉瀏覽器只會使存儲在客戶端瀏覽器內(nèi)存中的ses

13、sion cookie失效,不會使服 務器端的session對象失效。*十六、URL重寫有什么缺點*對所有的URL使用URL重寫,包括超鏈接,form的action,和重定向的URL。每 個引用你的站點的URL,以及那些返回給用戶的URL(即使通過間接手段,比如服務器重定 向中的Location字段)都要添加額外的信息。這意味著在你的站點上不能有任何靜態(tài)的HTML頁面(至少靜態(tài)頁面中不能有任何鏈 接到站點動態(tài)頁面的鏈接)。因此,每個頁面都必須使用servlet或JSP動態(tài)生成。即使所 有的頁面都動態(tài)生成,如果用戶離開了會話并通過書簽或鏈接再次回來,會話的信息都會丟 失,因為存儲下來的鏈接含有錯

14、誤的標識信息一該URL后面的SESSION ID已經(jīng)過期了。*十七、使用隱藏的表單域有什么缺點 *文本鏈接并不產(chǎn)生表單提交,因此隱藏的表單域不能支持通常的會話跟蹤,只能 用于一系列特定的操作中,比如在線商店的結(jié)賬過程 *十八、會話跟蹤的基本步驟 *訪問與當前請求相關(guān)的會話對象查找與會話相關(guān)的信息存儲會話信息廢棄會話數(shù)據(jù)*十九、getSession()/getSession(true)、getSession(false)的區(qū)另II*getSession()/getSession(true): 當 session 存在時返回該 session,否則新建一個 session 并返回該對象getSes

15、sion(false): 當 session 存在時返回該 session,否則不會新建 session,返回 null *二十、如何將信息于會話關(guān)聯(lián)起來 *setAttribute會替換任何之前設定的值;如果想要在不提供任何代替的情況下移除某個 值,則應使用removeAttribute。這個方法會觸發(fā)所有實現(xiàn)了 HttpSessionBindingListener 接口的值的 valueUnbound方法。*二十一、會話屬性的類型有什么限制嗎*通常會話屬性的類型只要是Object就可以了。除了 null或基本類型,如int,double,boolean。 如果要使用基本類型的值作為屬性,必

16、須將其轉(zhuǎn)換為相應的封裝類對象 *二十二、如何廢棄會話數(shù)據(jù) *只移除自己編寫的servlet創(chuàng)建的數(shù)據(jù):調(diào)用removeAttribute(key”)將指定鍵關(guān)聯(lián)的值廢棄刪除整個會話(在當前Web應用中):調(diào)用invalidate,將整個會話廢棄掉。這樣做會丟失該用戶的所有會話數(shù)據(jù),而非僅僅由 我們servlet或JSP頁面創(chuàng)建的會話數(shù)據(jù)將用戶從系統(tǒng)中注銷并刪除所有屬于他(或她)的會話調(diào)用logOut,將客戶從Web服務器中注銷,同時廢棄所有與該用戶相關(guān)聯(lián)的會話(每個 Web應用至多一個)。這個操作有可能影響到服務器上多個不同的Web應用二十三、使用isNew來判斷用戶是否為新舊用戶的錯誤做法

17、*public boolean isNew()方法如果會話尚未和客戶程序(瀏覽器)發(fā)生任何聯(lián)系,則這個方法返 回true,這一般是因為會話是新建的,不是由輸入的客戶請求所引起的。但如果isNew返回false,只不過是說明他之前曾經(jīng)訪問該Web應用,并不代表他們曾訪 問過我們的servlet或JSP頁面。因為session是與用戶相關(guān)的,在用戶之前訪問的每一個頁面都有可能創(chuàng)建了會話。因此 isNew為false只能說用戶之前訪問過該Web應用,session可以是當前頁面創(chuàng)建,也可能 是由用戶之前訪問過的頁面創(chuàng)建的。正確的做法是判斷某個session中是否存在某個特定的key且其value是否

18、正確 *二十四、Cookie的過期和Session的超時有什么區(qū)別 *會話的超時由服務器來維護,它不同于Cookie的失效日期。首先,會話一般基于駐留內(nèi)存 的 cookie不是持續(xù)性的cookie,因而也就沒有截至日期。即使截取到JSESSIONID cookie,并為它 設定一個失效日期發(fā)送出去。瀏覽器會話和服務器會話也會截然不同。*二十五、session cookie和session對象的生命周期是一樣的嗎*當用戶關(guān)閉了瀏覽器雖然session cookie已經(jīng)消失,但session對象仍然保存在服務器端 *二十六、是否只要關(guān)閉瀏覽器,session就消失了*程序一般都是在用戶做log o

19、ff的時候發(fā)個指令去刪除session,然而瀏覽器從來不會主動在 關(guān)閉之前通知服務器它將要被關(guān)閉,因此服務器根本不會有機會知道瀏覽器已經(jīng)關(guān)閉。服務 器會一直保留這個會話對象直到它處于非活動狀態(tài)超過設定的間隔為止。之所以會有這種錯誤的認識,是因為大部分session機制都使用會話cookie來保存session id,而關(guān)閉瀏覽器后這個session id就消失了,再次連接到服務器時也就無法找到原來的 session。如果服務器設置的cookie被保存到硬盤上,或者使用某種手段改寫瀏覽器發(fā)出的HTTP請 求報頭,把原來的session id發(fā)送到服務器,則再次打開瀏覽器仍然能夠找到原來的 ses

20、sion。恰恰是由于關(guān)閉瀏覽器不會導致session被刪除,迫使服務器為session設置了一個失效時 間,當距離客戶上一次使用session的時間超過了這個失效時間時,服務器就可以認為客戶 端已經(jīng)停止了活動,才會把session刪除以節(jié)省存儲空間。由此我們可以得出如下結(jié)論:關(guān)閉瀏覽器,只會是瀏覽器端內(nèi)存里的session cookie消失,但不會使保存在服務器 端的session對象消失,同樣也不會使已經(jīng)保存到硬盤上的持久化cookie消失。二十七、打開兩個瀏覽器窗口訪問應用程序會使用同一個session還是不同的session*通常session cookie是不能跨窗口使用的,當你新開了

21、一個瀏覽器窗口進入相同頁面時, 系統(tǒng)會賦予你一個新的session id,這樣我們信息共享的目的就達不到了。此時我們可以先把session id保存在persistent cookie中(通過設置session的最大有效時 間),然后在新窗口中讀出來,就可以得到上一個窗口的session id 了,這樣通過session cookie和persistent cookie的結(jié)合我們就可以實現(xiàn)了跨窗口的會話跟蹤。*二十八、如何使用會話顯示每個客戶的訪問次數(shù)*由于客戶的訪問次數(shù)是一個整型的變量,但session的屬性類型中不能使用int,double, boolean等基本類型的變量,所以我們要用到

22、這些基本類型的封裝類型對象作為session對 象中屬性的值但像Integer是一種不可修改(Immutable)的數(shù)據(jù)結(jié)構(gòu):構(gòu)建后就不能更改。這意味著每 個請求都必須創(chuàng)建新的Integer對象,之后使用setAttribute來代替之前存在的老的屬性的 值。例如:HttpSession session = request.getSession();SomeImmutalbeClassvalue=(SomeImmutableClass)session.getAttribute(SomeIdentifier”);if (value= =null)value = new SomeImmutableClass(.); / 新創(chuàng)建一個不可更改對象elsevalue = new SomeImm

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論