Cookies&&session

大家好,我是IT修真院,一枚正直純潔善良的如剛?cè)腴T(mén)的Java程序員,今天試著給大家分享一下關(guān)于cookie與session的知識(shí)概念.


1.背景介紹

web應(yīng)用程序開(kāi)發(fā)流程,中最后一個(gè)交互環(huán)節(jié)來(lái)傳輸數(shù)據(jù),使用的就是HTTP協(xié)議,但是Http協(xié)議是無(wú)狀態(tài)的,也就是說(shuō)無(wú)法對(duì)用戶(hù)的狀態(tài)進(jìn)行保存管理;簡(jiǎn)單說(shuō)就是,當(dāng)瀏覽器發(fā)送請(qǐng)求給服務(wù)器的時(shí)候,服務(wù)器響應(yīng)客戶(hù)端請(qǐng)求,但是當(dāng)同一個(gè)瀏覽器再次發(fā)送請(qǐng)求給服務(wù)器的時(shí)候,服務(wù)器并不知道它就是剛才的那個(gè)瀏覽器;服務(wù)器無(wú)法記憶,所以稱(chēng)作無(wú)狀態(tài)協(xié)議。

那么問(wèn)題來(lái)了,正是由于HTTP無(wú)狀態(tài)的協(xié)議,一旦數(shù)據(jù)交換完畢,客戶(hù)端與服務(wù)器端的連接就會(huì)關(guān)閉,再次交換數(shù)據(jù)需要建立新的連接。這就意味著服務(wù)器無(wú)法從連接上跟蹤會(huì)話;但是要跟蹤該會(huì)話,必須引入一種機(jī)制……


2.知識(shí)剖析

Cookie就是這樣的一種機(jī)制。它可以彌補(bǔ)HTTP協(xié)議無(wú)狀態(tài)的不足。在Session出現(xiàn)之前,基本上所有的網(wǎng)站都采用Cookie來(lái)跟蹤會(huì)話,session也是一樣的,都是一種會(huì)話跟蹤技術(shù),用來(lái)跟蹤用戶(hù)的整個(gè)會(huì)話;只不過(guò)Cookie通過(guò)在客戶(hù)端記錄信息確定用戶(hù)身份,Session通過(guò)在服務(wù)器端記錄信息確定用戶(hù)身份。

具體來(lái)說(shuō);Cookie是一種瀏覽器和服務(wù)器交互數(shù)據(jù)的方式;也是一種會(huì)話跟蹤技術(shù),也算是一種緩存機(jī)制,它由服務(wù)器端創(chuàng)建,但是不會(huì)保存在服務(wù)器;創(chuàng)建好之后,發(fā)送給瀏覽器。瀏覽器保存在用戶(hù)本地;下一次訪問(wèn)網(wǎng)站的時(shí)候,就會(huì)把該Cookie發(fā)送給服務(wù)器。

而session實(shí)際理解就是,從用戶(hù)打開(kāi)瀏覽器訪問(wèn)一個(gè)網(wǎng)站開(kāi)始,無(wú)論在這個(gè)網(wǎng)站中訪問(wèn)了多少頁(yè)面,點(diǎn)擊了多少鏈接,都屬于同一個(gè)會(huì)話。直到該用戶(hù)關(guān)閉瀏覽器為止,都屬于同一個(gè)會(huì)話.而會(huì)話是在服務(wù)器里的,也可以抽象理解為服務(wù)器里的一個(gè)個(gè)小盒子.這樣看的話session是服務(wù)器里的小盒子,而cookie是瀏覽器的小鑰匙;兩者匹配之后完成一次訪問(wèn)請(qǐng)求;


3.差別體現(xiàn)

Session

在服務(wù)器端保存用戶(hù)信息(保存在服務(wù)端的內(nèi)存里面)

Session中保存的是object類(lèi)型

隨會(huì)話的結(jié)束而將其存儲(chǔ)的數(shù)據(jù)銷(xiāo)毀

保存重要的信息(安全性比較高的信息)


cookie

在客戶(hù)端保存用戶(hù)信息(以文本文件的形式存在)

cookie中保存的是String類(lèi)型

cookie可以長(zhǎng)期保存在客戶(hù)端

保存不重要的用戶(hù)信息(瀏覽記錄,訪問(wèn)習(xí)慣)


4.代碼演示

設(shè)置cookie

<%

//創(chuàng)建了一個(gè)cookie,名字是"name"值是"hello"

Cookiec=newCookie("name1","hello");

//表示這個(gè)cookie可以保留一天,如果是0,表示瀏覽器一關(guān)閉就銷(xiāo)毀

c.setMaxAge(60*60*24);

//Path表示服務(wù)器的主機(jī)名,只有瀏覽器通過(guò)這個(gè)主機(jī)名訪問(wèn)服務(wù)器的時(shí)候,才會(huì)提交這個(gè)cookie到服務(wù)端

c.setPath("127.0.0.1");

//通過(guò)response把這個(gè)cookie保存在瀏覽器端

response.addCookie(c);

%>


獲取cookie

<%

//表示獲取所有瀏覽器傳遞過(guò)來(lái)的cookie

Cookie[]cookies=request.getCookies();

//如果瀏覽器端沒(méi)有任何cookie,得到的Cookie數(shù)組是null

if(null!=cookies)

//遍歷所有的cookie

for(intd=0;d<=cookies.length-1;d++) {

out.print(cookies[d].getName()+":"+cookies[d].getValue()+"
");

}

%>


設(shè)置session

<%

//session對(duì)象保存數(shù)據(jù)的方式,類(lèi)似于Map鍵值對(duì)(key-value)

session.setAttribute("name2","hi");

%>

跳轉(zhuǎn)到獲取session的頁(yè)面


獲取session

<%

//根據(jù)name取出相應(yīng)的名稱(chēng)

Stringname2=(String)session.getAttribute("name2");

%>

session中的name:<%=name2%>


5.實(shí)際應(yīng)用

if(student!=null) {

//if (student.getUser().equals(root.getUser())&& student.getPassword().equals(root.getPassword())) {

//生成token

student.setLogin_at(System.currentTimeMillis());

studentService.modify(student);

DesUtildes=newDesUtil("java");

Stringstr=student.getLogin_at()+","+student.getId();

Stringtoken=des.encrypt(str);

// String token = TokenUtil.getToken(root.getLogin_at(),root.getId());

Cookiecookie=newCookie("Token",token);

cookie.setPath("/");

cookie.setMaxAge(60*60*24);

response.addCookie(cookie);

request.getSession().setAttribute("Token",token);

return"redirect:/home";


6.參考文獻(xiàn)

http://blog.csdn.net/u011518120/article/details/52151090

https://www.cnblogs.com/fnng/archive/2012/08/14/2637279.html

http://blog.csdn.net/Jmilk/article/details/55686267?locationNum=9&fps=1

http://how2j.cn?p=13495



7.今天的分享就到這里啦,剛學(xué)沒(méi)多久,水平不夠,歡迎大家指正,拍磚~

PPT戳這里

視頻戳這里

你可以直接點(diǎn)擊此鏈接http://www.jnshu.com/login/1/15686104,觀看任務(wù)體系

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容