Cookies&&session

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


1.背景介紹

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

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


2.知識剖析

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

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

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


3.差別體現(xiàn)

Session

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

Session中保存的是object類型

隨會話的結(jié)束而將其存儲的數(shù)據(jù)銷毀

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


cookie

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

cookie中保存的是String類型

cookie可以長期保存在客戶端

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


4.代碼演示

設(shè)置cookie

<%

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

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

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

c.setMaxAge(60*60*24);

//Path表示服務(wù)器的主機名,只有瀏覽器通過這個主機名訪問服務(wù)器的時候,才會提交這個cookie到服務(wù)端

c.setPath("127.0.0.1");

//通過response把這個cookie保存在瀏覽器端

response.addCookie(c);

%>


獲取cookie

<%

//表示獲取所有瀏覽器傳遞過來的cookie

Cookie[]cookies=request.getCookies();

//如果瀏覽器端沒有任何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對象保存數(shù)據(jù)的方式,類似于Map鍵值對(key-value)

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

%>

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


獲取session

<%

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

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

%>

session中的name:<%=name2%>


5.實際應(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.參考文獻

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é)沒多久,水平不夠,歡迎大家指正,拍磚~

PPT戳這里

視頻戳這里

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

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

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

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