Cookie 和 session詳解

在將cookie 和 session 以前須要先理解什麼是會話
會話:
用戶打開一個瀏覽器,點擊多個超連接,訪問多個web資源,而後關閉瀏覽器,整個過程稱爲一個會話。
http協議是無狀態的,一旦數據交換完畢,客戶端與服務器端的鏈接就會關閉,再次交換創建新的鏈接,也就是說,服務器沒法跟蹤會話。而cookie 和 session 就是用與解決這種問題。
1.什麼是cookie
cookie是客戶端的技術,程序把每一個用戶數據以cookie的形式寫給用戶各自的瀏覽器,當客戶端再次訪問服務器的時候,會帶着各自的Cookie過來,這樣服務器就能處理各自用戶的數據了
1.1. 如何使用cookieweb

Cookie cookie = new Cookie("name","value"); //建立一個cookie
cookie.setPath("/"); //cookie記得必定要設定路徑,默認是當前的類的路徑,設置/表明是整個web應用。
cookie.setMaxAge(""); //設置有效期限,默認是瀏覽器的進程,也就是瀏覽器關了,就沒了。若是是設置爲負數,那麼cookie不會被存儲,而且會被刪除。若是設置爲0,那麼cookie會被刪除。(這些內容在API上描述得很是清楚)
response.addCookie(cookie);//添加cookie,這樣才能回寫給客戶端

以上的內容就是關於如何去使用一個cookie了。
1.2. cookie的細節
根據API的描述,一個cookie最大爲4KB.瀏覽器通常只容許存放300個cookie,每一個站點最多存放20個Cookie。Cookie被建立的時候默認使用Verssion 0 ,也就是http 1.0
1.2.1 cookie的刪除
在cookie的API中沒有刪除cookie的具體方法,可是咱們能夠經過設置cookie的生命週期,來說cookie刪除,設置爲0表明刪除(詳解自行查看setMaxAge()方法)數組

cookie.setMaxAge(0);  
若是說不想從request域中獲取cookie,而後將該cookie的生命週期設置爲0,能夠採用如下這個方法
Cookie cookie = new Cookie("想刪除的cooki名字","value");
cookie.setPath("");//此處路徑必須與想刪除的cookie一致
cookie.setMaxAge(0); 
response.addCookie(cookie);

1.3 cookie的獲取瀏覽器

request.getCookies(); //返回的是cookie的數組

以上就是cookie的經常使用方法。tomcat

1.4 cookie設置註釋安全

cookie.setComment("comment")

1.5 cookie 設置安全傳輸協議(例如 https ,ssl)服務器

cookie.setSecure(true|false) 默認爲false

1.6 cookie 防止 xss(跨站腳本攻擊) 攻擊cookie

cookie.setHttpOnly(true)  // 高版本的 servlet Api中有提供此方法

當將httpOnly設置爲true時,將沒法經過js腳本獲取cookie信息。可以有效的防止xss攻擊session

2.什麼是session
session是服務端的技術,當瀏覽器第1次訪問web資源的時候,服務器會自動爲其建立一個session,並保存在服務器,當須要保存用戶數據的時候,能夠將數據寫入session中。當用戶訪問其餘程序的時候,就能夠直接從session中取值。值得一提的是sesion是創建在cookie的基礎上建立的。xss

2.1 session實現原理
session的實現原理是創建在給瀏覽器回寫cookie,而且是以JSESSIONID爲鍵,可是這個cookie是沒有時間的,也就是說,當你關閉瀏覽器時,表明一個會話結束了,也就是說你的session會被刪除,當你再次訪問服務器的時候,服務器會爲你從新建立一個session。url

2.2 session的使用

2.2.1 客戶端不由用cookie的狀況

HttpSession session = request.getSession();//客戶端訪問服務器的時候,服務器會自動建立一個session,若是客戶端沒有禁用cookie的話。
String sessionId = session.getId();
Cookie cookie = new Cookie("JSESSIONID",sessionId);
cookie.setPaht("/");
cookie.setMaxAge(30*60);//注意在tomcat的web.xml文件中,設置了session的生命週期最長爲30分鐘。
response.addCookie(cookie);
session.setAttribute("key","value");

2.2.2 客戶端禁用cookie的狀況

若是客戶端禁用cookie,那麼須要調用response的encodeURL("轉發的地址")
HttpSession session = request.getSession();
String url1 = response.encodeURL("xxxx");//注意,調用這個方法以前,必需要先獲取session,(在該方法的API描述得很清楚)
PrintWriter pw = response.getWriter();
pw.write(url1);

2.3 session的一些細節

設置session的生命週期

能夠經過設置配置文件的形式,設置session的生命週期;在web.xml文件中添加以下代碼

<session-config>
    <session-timeout>30</session-timeout>//備註這裏是以分鐘爲單位
</session-config>

參考如下2篇博文:
https://my.oschina.net/kevina... 深刻源碼剖析了session和cookie
http://blog.csdn.net/fangaoxi... 介紹了一些基本的知識

相關文章
相關標籤/搜索