日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

session机制和cookie机制

發(fā)布時(shí)間:2023/12/9 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 session机制和cookie机制 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、cookie機(jī)制和session機(jī)制的區(qū)別

具體來(lái)說(shuō)cookie機(jī)制采用的是在客戶端保持狀態(tài)的方案,而session機(jī)制采用的是在服務(wù)器端保持狀態(tài)的方案。同時(shí)我們也看到,由于才服務(wù)器端保持狀態(tài)的方案在客戶端也需要保存一個(gè)標(biāo)識(shí),所以session 機(jī)制可能需要借助于cookie機(jī)制來(lái)達(dá)到保存標(biāo)識(shí)的目的,但實(shí)際上還有其他選擇

二、會(huì)話cookie和持久cookie的區(qū)別

如果不設(shè)置過(guò)期時(shí)間,則表示這個(gè)cookie生命周期為瀏覽器會(huì)話期間,只要關(guān)閉瀏覽器窗口,cookie就消失了。這種生命期為瀏覽會(huì)話期的 cookie被稱為會(huì)話cookie。會(huì)話cookie一般不保存在硬盤(pán)上而是保存在內(nèi)存里。  如果設(shè)置了過(guò)期時(shí)間,瀏覽器就會(huì)把cookie保存到硬盤(pán)上,關(guān)閉后再次打開(kāi)瀏覽器,這些cookie依然有效直到超過(guò)設(shè)定的過(guò)期時(shí)間。  存儲(chǔ)在硬盤(pán)上的cookie可以在不同的瀏覽器進(jìn)程間共享,比如兩個(gè)IE窗口。而對(duì)于保存在內(nèi)存的cookie,不同的瀏覽器有不同的處理方式。

三、如何利用實(shí)現(xiàn)自動(dòng)登錄

  當(dāng)用戶在某個(gè)網(wǎng)站注冊(cè)后,就會(huì)收到一個(gè)惟一用戶ID的cookie。客戶后來(lái)重新連接時(shí),這個(gè)用戶ID會(huì)自動(dòng)返回,服務(wù)器對(duì)它進(jìn)行檢查,確定它是否為注冊(cè)用戶且選擇了自動(dòng)登錄,從而使用戶務(wù)需給出明確的用戶名和密碼,就可以訪問(wèn)服務(wù)器上的資源。

四、如何根據(jù)用戶的愛(ài)好定制站點(diǎn)

  網(wǎng)站可以使用cookie記錄用戶的意愿。對(duì)于簡(jiǎn)單的設(shè)置,網(wǎng)站可以直接將頁(yè)面的設(shè)置存儲(chǔ)在cookie中完成定制。然而對(duì)于更復(fù)雜的定制,網(wǎng)站只需僅將一個(gè)惟一的標(biāo)識(shí)符發(fā)送給用戶,由服務(wù)器端的數(shù)據(jù)庫(kù)存儲(chǔ)每個(gè)標(biāo)識(shí)符對(duì)應(yīng)的頁(yè)面設(shè)置。

五、cookie的發(fā)送

1.創(chuàng)建Cookie對(duì)象 2.設(shè)置最大時(shí)效 3.將Cookie放入到HTTP響應(yīng)報(bào)頭如果你創(chuàng)建了一個(gè)cookie,并將他發(fā)送到瀏覽器,默認(rèn)情況下它是一個(gè)會(huì)話級(jí)別的cookie:存儲(chǔ)在瀏覽器的內(nèi)存中,用戶退出瀏覽器之后被刪除。如果你希望瀏覽器將該cookie存儲(chǔ)在磁盤(pán)上,則需要使用maxAge,并給出一個(gè)以秒為單位的時(shí)間。將最大時(shí)效設(shè)為0則是命令瀏覽器刪除該cookie。發(fā)送cookie需要使用HttpServletResponse的addCookie方法,將cookie插入到一個(gè)Set-Cookie HTTP請(qǐng)求報(bào)頭中。由于這個(gè)方法并不修改任何之前指定的Set-Cookie報(bào)頭,而是創(chuàng)建新的報(bào)頭,因此我們將這個(gè)方法稱為是addCookie,而非 setCookie。同樣要記住響應(yīng)報(bào)頭必須在任何文檔內(nèi)容發(fā)送到客戶端之前設(shè)置。

六、cookie的讀取

1.調(diào)用request.getCookie 要獲取有瀏覽器發(fā)送來(lái)的cookie,需要調(diào)用HttpServletRequest的getCookies方法,這個(gè)調(diào)用返回Cookie對(duì)象的數(shù)組,對(duì)應(yīng)由HTTP請(qǐng)求中Cookie報(bào)頭輸入的值。 2.對(duì)數(shù)組進(jìn)行循環(huán),調(diào)用每個(gè)cookie的getName方法,直到找到感興趣的cookie為止 cookie與你的主機(jī)(域)相關(guān),而非你的servlet或JSP頁(yè)面。因而,盡管你的servlet可能只發(fā)送了單個(gè)cookie,你也可能會(huì)得到許多不相關(guān)的cookie。例如:  String cookieName = “userID”; Cookie cookies[] = request.getCookies(); if (cookies!=null){ for(int i=0;i<cookies cookie if dosomethingwith a b c d web session id href>超文本鏈接并不產(chǎn)生表單提交,因此隱藏的表單域不能支持通常的會(huì)話跟蹤,只能用于一系列特定的操作中,比如在線商店的結(jié)賬過(guò)程

七、會(huì)話跟蹤的基本步驟

1.訪問(wèn)與當(dāng)前請(qǐng)求相關(guān)的會(huì)話對(duì)象 2.查找與會(huì)話相關(guān)的信息 3.存儲(chǔ)會(huì)話信息 4.廢棄會(huì)話數(shù)據(jù)

八、getSession()/getSession(true)、getSession(false)的區(qū)別 ************************************************************************************* getSession()/getSession(true):當(dāng)session存在時(shí)返回該session,否則新建一個(gè)session并返回該對(duì)象 getSession(false):當(dāng)session存在時(shí)返回該session,否則不會(huì)新建session,返回null

九、如何將信息于會(huì)話關(guān)聯(lián)起來(lái) *************************************************************************************   setAttribute會(huì)替換任何之前設(shè)定的值;如果想要在不提供任何代替的情況下移除某個(gè)值,則應(yīng)使用removeAttribute。這個(gè)方法會(huì)觸發(fā)所有實(shí)現(xiàn)了HttpSessionBindingListener接口的值的valueUnbound 方法。

十、會(huì)話屬性的類型有什么限制嗎

通常會(huì)話屬性的類型只要是Object就可以了。除了null或基本類型,如int,double,boolean。如果要使用基本類型的值作為屬性,必須將其轉(zhuǎn)換為相應(yīng)的封裝類對(duì)象

十一、如何廢棄會(huì)話數(shù)據(jù)

A.只移除自己編寫(xiě)的servlet創(chuàng)建的數(shù)據(jù): 調(diào)用removeAttribute(“key”)將指定鍵關(guān)聯(lián)的值廢棄 B.刪除整個(gè)會(huì)話(在當(dāng)前Web應(yīng)用中): 調(diào)用invalidate,將整個(gè)會(huì)話廢棄掉。這樣做會(huì)丟失該用戶的所有會(huì)話數(shù)據(jù),而非僅僅由我們 servlet或JSP頁(yè)面創(chuàng)建的會(huì)話數(shù)據(jù) C.將用戶從系統(tǒng)中注銷并刪除所有屬于他(或她)的會(huì)話 調(diào)用logOut,將客戶從Web服務(wù)器中注銷,同時(shí)廢棄所有與該用戶相關(guān)聯(lián)的會(huì)話(每個(gè)Web應(yīng)用至多一個(gè))。這個(gè)操作有可能影響到服務(wù)器上多個(gè)不同的 Web應(yīng)用

十二、使用isNew來(lái)判斷用戶是否為新舊用戶的錯(cuò)誤做法

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

十三、Cookie的過(guò)期和Session的超時(shí)有什么區(qū)別

會(huì)話的超時(shí)由服務(wù)器來(lái)維護(hù),它不同于Cookie的失效日期。首先,會(huì)話一般基于駐留內(nèi)存的cookie 不是持續(xù)性的cookie,因而也就沒(méi)有截至日期。即使截取到JSESSIONID cookie,并為它設(shè)定一個(gè)失效日期發(fā)送出去。瀏覽器會(huì)話和服務(wù)器會(huì)話也會(huì)截然不同。

十四、session cookie和session對(duì)象的生命周期是一樣的嗎

當(dāng)用戶關(guān)閉了瀏覽器雖然session cookie已經(jīng)消失,但session對(duì)象仍然保存在服務(wù)器端

十五、是否只要關(guān)閉瀏覽器,session就消失了

程序一般都是在用戶做log off的時(shí)候發(fā)個(gè)指令去刪除session,然而瀏覽器從來(lái)不會(huì)主動(dòng)在關(guān)閉之前通知服務(wù)器它將要被關(guān)閉,因此服務(wù)器根本不會(huì)有機(jī)會(huì)知道瀏覽器已經(jīng)關(guān)閉。服務(wù)器會(huì)一直保留這個(gè)會(huì)話對(duì)象直到它處于非活動(dòng)狀態(tài)超過(guò)設(shè)定的間隔為止。之所以會(huì)有這種錯(cuò)誤的認(rèn)識(shí),是因?yàn)榇蟛糠謘ession機(jī)制都使用會(huì)話cookie來(lái)保存session id,而關(guān)閉瀏覽器后這個(gè)session id就消失了,再次連接到服務(wù)器時(shí)也就無(wú)法找到原來(lái)的session。如果服務(wù)器設(shè)置的cookie被保存到硬盤(pán)上,或者使用某種手段改寫(xiě)瀏覽器發(fā)出的HTTP請(qǐng)求報(bào)頭,把原來(lái)的session id發(fā)送到服務(wù)器,則再次打開(kāi)瀏覽器仍然能夠找到原來(lái)的session。恰恰是由于關(guān)閉瀏覽器不會(huì)導(dǎo)致session被刪除,迫使服務(wù)器為session設(shè)置了一個(gè)失效時(shí)間,當(dāng)距離客戶上一次使用session的時(shí)間超過(guò)了這個(gè)失效時(shí)間時(shí),服務(wù)器就可以認(rèn)為客戶端已經(jīng)停止了活動(dòng),才會(huì)把session刪除以節(jié)省存儲(chǔ)空間。  由此我們可以得出如下結(jié)論:  關(guān)閉瀏覽器,只會(huì)是瀏覽器端內(nèi)存里的session cookie消失,但不會(huì)使保存在服務(wù)器端的session對(duì)象消失,同樣也不會(huì)使已經(jīng)保存到硬盤(pán)上的持久化cookie消失。

十六、打開(kāi)兩個(gè)瀏覽器窗口訪問(wèn)應(yīng)用程序會(huì)使用同一個(gè)session還是不同的session

通常session cookie是不能跨窗口使用的,當(dāng)你新開(kāi)了一個(gè)瀏覽器窗口進(jìn)入相同頁(yè)面時(shí),系統(tǒng)會(huì)賦予你一個(gè)新的session id,這樣我們信息共享的目的就達(dá)不到了。此時(shí)我們可以先把session id保存在persistent cookie中(通過(guò)設(shè)置session的最大有效時(shí)間),然后在新窗口中讀出來(lái),就可以得到上一個(gè)窗口的session id了,這樣通過(guò)session cookie和persistent cookie的結(jié)合我們就可以實(shí)現(xiàn)了跨窗口的會(huì)話跟蹤。

十七、如何使用會(huì)話顯示每個(gè)客戶的訪問(wèn)次數(shù)

由于客戶的訪問(wèn)次數(shù)是一個(gè)整型的變量,但session的屬性類型中不能使用int,double,boolean等基本類型的變量,所以我們要用到這些基本類型的封裝類型對(duì)象作為session對(duì)象中屬性的值  但像Integer是一種不可修改(Immutable)的數(shù)據(jù)結(jié)構(gòu):構(gòu)建后就不能更改。這意味著每個(gè)請(qǐng)求都必須創(chuàng)建新的Integer對(duì)象,之后使用setAttribute來(lái)代替之前存在的老的屬性的值。例如: HttpSession session = request.getSession(); SomeImmutalbeClass value = (SomeImmutableClass)session.getAttribute(“SomeIdentifier”); if (value= =null){ value = new SomeImmutableClass(…); // 新創(chuàng)建一個(gè)不可更改對(duì)象 }else{ value = new SomeImmutableClass(calculatedFrom(value)); // 對(duì)value重新計(jì)算后創(chuàng)建新的對(duì)象 } session.setAttribute(“someIdentifier”,value); // 使用新創(chuàng)建的對(duì)象覆蓋原來(lái)的老的對(duì)象

十八、如何使用會(huì)話累計(jì)用戶的數(shù)據(jù)

使用可變的數(shù)據(jù)結(jié)構(gòu),比如數(shù)組、List、Map或含有可寫(xiě)字段的應(yīng)用程序?qū)S械臄?shù)據(jù)結(jié)構(gòu)。通過(guò)這種方式,除非首次分配對(duì)象,否則不需要調(diào)用 setAttribute。例如 HttpSession session = request.getSession(); SomeMutableClass value = (SomeMutableClass)session.getAttribute(“someIdentifier”); if(value = = null){ value = new SomeMutableClass(…); session.setAttribute(“someIdentifier”,value); }else{ value.updateInternalAttribute(…); // 如果已經(jīng)存在該對(duì)象則更新其屬性而不需重新設(shè)置屬性 }

十九、不可更改對(duì)象和可更改對(duì)象在會(huì)話數(shù)據(jù)更新時(shí)的不同處理

不可更改對(duì)象因?yàn)橐坏﹦?chuàng)建之后就不能更改,所以每次要修改會(huì)話中屬性的值的時(shí)候,都需要調(diào)用setAttribute(“someIdentifier”,newValue)來(lái)代替原有的屬性的值,否則屬性的值不會(huì)被更新可更改對(duì)象因?yàn)槠渥陨硪话闾峁┝诵薷淖陨韺傩缘姆椒?#xff0c;所以每次要修改會(huì)話中屬性的值的時(shí)候,只要調(diào)用該可更改對(duì)象的相關(guān)修改自身屬性的方法就可以了。這意味著我們就不需要調(diào)用setAttribute方法了

轉(zhuǎn)載于:https://blog.51cto.com/lya041/660487

總結(jié)

以上是生活随笔為你收集整理的session机制和cookie机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。