Cookie和Session
會話
-
什么是會話?
會話是瀏覽器和服務器之間的多次請求和回應
也就是說,從瀏覽器訪問服務器開始,到訪問服務器結束,瀏覽器關閉為止的這段時間內容產生的多次請求和回應,合起來叫做瀏覽器和服務器之間的一次會話
-
有狀態會話:一個網站知曉你登陸過、存盤了一些基本資訊
保存會話的兩種技術
- cookie:
- 一種客戶端技術,服務器回應相關資訊給瀏覽器,保存在瀏覽器本地
- session:
- 服務器技術,保存會話資訊到服務器中,把資訊和資料放在session中
Cookie
Cookie是一種存盤在計算機瀏覽器目錄中的文本檔案
一個例子:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("gbk");
resp.setCharacterEncoding("gbk");
PrintWriter out = resp.getWriter();
//cookie 服務器端從客戶端取得
Cookie[] cookies = req.getCookies();//這里回傳陣列
// 判斷cookie是否存在
if(cookies!=null){
out.print("你第一次訪問的時間是:");
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
//獲取cookie的名字
if(cookie.getName().equals("LastLoginTime")){
// 顯示最后一次登錄的值
long l = Long.parseLong(cookie.getValue());
Date date = new Date(l);
out.write(date.toLocaleString());
}
}
}else {
out.print("這是你第一次訪問網站");
}
// 服務器給客戶端回應cookie
Cookie cookie = new Cookie("LastLoginTime", System.currentTimeMillis()+"");
resp.addCookie(cookie);
}
第一次訪問:

第二次訪問:

- 一個cookie只能保存一個資訊
- 一個web站點可以給瀏覽器發送多個cookie,最多存放20個cookie
- cookie大小有限制4kb
- 300個cookie瀏覽器上限
洗掉cookie
-
不設定有效期,關閉瀏覽器,自動失效
-
設定有效期
// 服務器給客戶端回應cookie Cookie cookie = new Cookie("LastLoginTime", System.currentTimeMillis()+""); // 設定有效期為0 cookie.setMaxAge(0); resp.addCookie(cookie);
如果cookie設定為中文可能會出現亂碼:可以通過以下方法解決
URLDecoder.decode(cookie.getValue(),"UTF-8");解碼
URLEncoder.encode("啊","utf-8");編碼
Session
- 服務器會給每一個用戶(瀏覽器)創建一個session物件
- 一個Session獨占一個瀏覽器,只要瀏覽器沒關,session就存在
Session和cookie區別:
- cookie是把用戶的資料保存在瀏覽器
- session把用戶的資料寫到用戶獨占session中,服務器端保存
- session物件由服務創建
創建場景:
- 保存一個登錄用戶的資訊
- 購物車資訊
- 整個網站經常使用的資料
使用例子:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 解決亂碼問題
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
// 瀏覽器顯示亂碼問題
resp.setContentType("text/html;charset=utf-8");
// 得到session
HttpSession session = req.getSession();
// 給session存盤東西
session.setAttribute("name","lihua");
// 獲得session的id
String id = session.getId();
// 判斷session是不是新創建的
if(session.isNew()){
resp.getWriter().write("session創建成功,id是:"+id);
}else {
resp.getWriter().write("session已經在服務器中存在,id是:"+id);
}
}
/*session創建的時候創建一個cookie回應回去,鍵值分別為JSESSIONID,和session的Id,瀏覽器通過這個判斷session是否已經創建,和辨別不同的用戶
結果:可以看出不同瀏覽器id不同


另外一些其他方法:
session.removeAttribute("name");//洗掉鍵值
session.invalidate();//注銷session
//注銷后重新生成一個id,相當于重新登錄或關閉瀏覽器
也可以在web.xml中設定默認失效時間
<session-config>
<!-- 設定session默認失效時間:1分鐘-->
<session-timeout>1</session-timeout>
</session-config>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/555853.html
標籤:其他
下一篇:返回列表
