大家好,我是IT修真院,一枚正直純潔善良的如剛入門的Java程序員,今天試著給大家分享一下關于cookie與session的知識概念.
1.背景介紹
web應用程序開發流程,中最后一個交互環節來傳輸數據,使用的就是HTTP協議,但是Http協議是無狀態的,也就是說無法對用戶的狀態進行保存管理;簡單說就是,當瀏覽器發送請求給服務器的時候,服務器響應客戶端請求,但是當同一個瀏覽器再次發送請求給服務器的時候,服務器并不知道它就是剛才的那個瀏覽器;服務器無法記憶,所以稱作無狀態協議。
那么問題來了,正是由于HTTP無狀態的協議,一旦數據交換完畢,客戶端與服務器端的連接就會關閉,再次交換數據需要建立新的連接。這就意味著服務器無法從連接上跟蹤會話;但是要跟蹤該會話,必須引入一種機制……
2.知識剖析
Cookie就是這樣的一種機制。它可以彌補HTTP協議無狀態的不足。在Session出現之前,基本上所有的網站都采用Cookie來跟蹤會話,session也是一樣的,都是一種會話跟蹤技術,用來跟蹤用戶的整個會話;只不過Cookie通過在客戶端記錄信息確定用戶身份,Session通過在服務器端記錄信息確定用戶身份。
具體來說;Cookie是一種瀏覽器和服務器交互數據的方式;也是一種會話跟蹤技術,也算是一種緩存機制,它由服務器端創建,但是不會保存在服務器;創建好之后,發送給瀏覽器。瀏覽器保存在用戶本地;下一次訪問網站的時候,就會把該Cookie發送給服務器。
而session實際理解就是,從用戶打開瀏覽器訪問一個網站開始,無論在這個網站中訪問了多少頁面,點擊了多少鏈接,都屬于同一個會話。直到該用戶關閉瀏覽器為止,都屬于同一個會話.而會話是在服務器里的,也可以抽象理解為服務器里的一個個小盒子.這樣看的話session是服務器里的小盒子,而cookie是瀏覽器的小鑰匙;兩者匹配之后完成一次訪問請求;
3.差別體現
Session
在服務器端保存用戶信息(保存在服務端的內存里面)
Session中保存的是object類型
隨會話的結束而將其存儲的數據銷毀
保存重要的信息(安全性比較高的信息)
cookie
在客戶端保存用戶信息(以文本文件的形式存在)
cookie中保存的是String類型
cookie可以長期保存在客戶端
保存不重要的用戶信息(瀏覽記錄,訪問習慣)
4.代碼演示
設置cookie
<%
//創建了一個cookie,名字是"name"值是"hello"
Cookiec=newCookie("name1","hello");
//表示這個cookie可以保留一天,如果是0,表示瀏覽器一關閉就銷毀
c.setMaxAge(60*60*24);
//Path表示服務器的主機名,只有瀏覽器通過這個主機名訪問服務器的時候,才會提交這個cookie到服務端
c.setPath("127.0.0.1");
//通過response把這個cookie保存在瀏覽器端
response.addCookie(c);
%>
獲取cookie
<%
//表示獲取所有瀏覽器傳遞過來的cookie
Cookie[]cookies=request.getCookies();
//如果瀏覽器端沒有任何cookie,得到的Cookie數組是null
if(null!=cookies)
//遍歷所有的cookie
for(intd=0;d<=cookies.length-1;d++) {
out.print(cookies[d].getName()+":"+cookies[d].getValue()+"
");
}
%>
設置session
<%
//session對象保存數據的方式,類似于Map鍵值對(key-value)
session.setAttribute("name2","hi");
%>
跳轉到獲取session的頁面
獲取session
<%
//根據name取出相應的名稱
Stringname2=(String)session.getAttribute("name2");
%>
session中的name:<%=name2%>
5.實際應用
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.今天的分享就到這里啦,剛學沒多久,水平不夠,歡迎大家指正,拍磚~
你可以直接點擊此鏈接http://www.jnshu.com/login/1/15686104,觀看任務體系