cookie session(javaweb)

Cookie

介紹

1、Cookie 翻譯過來是餅乾的意思。
2、Cookie 是服務器通知客戶端保存鍵值對的一種技術。
3、客戶端有了 Cookie 後,每次請求都發送給服務器。
4、每個 Cookie 的大小不能超過 4kb

創建 Cookie

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
	resp.addCookie(new Cookie("key","value"));
	resp.getWriter().write("success");
	}

在這裏插入圖片描述

服務器獲取 Cookie

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
	Cookie[] c=req.getCookies();
	for(int i=0;i<c.length;i++)
		resp.getWriter().println(c[i].getName()+c[i].getValue());
	}

在這裏插入圖片描述

Cookie 值的修改

方案一:

 // 1、先創建一個要修改的同名的 Cookie 對象
  // 2、在構造器,同時賦於新的 Cookie 值。
Cookie cookie = new Cookie("key1","newValue1"); 
// 3、調用 response.addCookie( Cookie ); 通知 客戶端 保存修改 
resp.addCookie(cookie);

方案二:

 // 1、先查找到需要修改的 Cookie 對象
  Cookie cookie = CookieUtils.findCookie("key2", req.getCookies()); 
  if (cookie != null) {
   // 2、調用 setValue()方法賦於新的 Cookie 值。 
   cookie.setValue("newValue2"); 
   // 3、調用 response.addCookie()通知客戶端保存修改 
   resp.addCookie(cookie); }

瀏覽器查看 Cookie

谷歌:
在這裏插入圖片描述
火狐
在這裏插入圖片描述

Cookie 生命控制

Cookie 的生命控制指的是如何管理 Cookie 什麼時候被銷燬(刪除) setMaxAge()
正數,表示在指定的秒數後過期
負數,表示瀏覽器一關,Cookie 就會被刪除(默認值是-1)
零,表示馬上刪除 Cookie

Cookie 有效路徑 Path

Cookie 的 path 屬性可以有效的過濾哪些 Cookie 可以發送給服務器。哪些不發。
path 屬性是通過請求的地址來進行有效的過濾。
例如:
CookieA path=/工程路徑
CookieB path=/工程路徑/abc
請求地址如下: http://ip:port/工程路徑/a.html
CookieA 發送
CookieB 不發送
http://ip:port/工程路徑/abc/a.html
CookieA 發送
CookieB 發送

Cookie --免輸入用戶名登錄

在這裏插入圖片描述
例子:

//登錄
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'index.jsp' starting page</title>
  </head> 
   <body>
<form action="/web2/cookie">
<input type="text" name="u" value=${cookie.u.value}>
<input type="submit"  value="login"></form>
  </body>
</html>
//cookie
package you;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class cookie extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		 String u = req.getParameter("u");
	      

	        if ("u".equals(u) ) {
	            //登錄 成功
	            Cookie cookie = new Cookie("u", u);
	            cookie.setMaxAge(60 * 60 * 24 * 7);//當前Cookie一週內有效
	            resp.addCookie(cookie);
	            System.out.println("登錄 成功");
	        } else {
//	            登錄 失敗
	            System.out.println("登錄 失敗");
	        }

	

	}
}

session回話

介紹

1、Session 就一個接口(HttpSession)。
2、Session 就是會話。它是用來維護一個客戶端和服務器之間關聯的一種技術。
3、每個客戶端都有自己的一個 Session 會話。
4、Session 會話中,我們經常用來保存用戶登錄之後的信息。

創建 Session 和獲取

request.getSession()
第一次調用是:創建 Session 會話 之後調用都是:獲取前面創建好的 Session 會話對象。
isNew(); 判斷到底是不是剛創建出來的(新的) true 表示剛創建 false 表示獲取之前創建
每個會話都有一個身份證號。也就是 ID 值。而且這個 ID 是唯一的。.
getId() 得到 Session 的會話 id 值。
例子:

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		HttpSession s=req.getSession();
	resp.getWriter().println(s.getId()+"  "+s.isNew());

	}

Session 域數據的存取

protected void setAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
 req.getSession().setAttribute("key1", "value1"); 
 resp.getWriter().write("已經往 Session 中保存了數據"); }

protected void getAttribute(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
Object attribute = req.getSession().getAttribute("key1"); 
resp.getWriter().write("從 Session 中獲取出 key1 的數據是:" + attribute); }

Session 生命週期控

public void setMaxInactiveInterval(int interval) 設置 Session 的超時時間(以秒爲單位),超過指定的時長,Session 就會被銷燬。值爲正數的時候,設定 Session 的超時時長。 負數表示永不超時(極少使用)
**public int getMaxInactiveInterval()**獲取 Session 的超時時間
public void invalidate() 讓當前 Session 會話馬上超時無效。

如果說。希望自己的 web 工程,默認的 Session 的超時時長爲其他時長。你可以在你自己的 web.xml 配置文件中做 以下配置。就可以修改你的 web 工程所有 Seession 的默認超時時長。

<!--表示當前 web 工程。創建出來 的所有 Session 默認是 20 分鐘 超時時長--> 
<session-config>
 <session-timeout>20</session-timeout>
  </session-config>

session超時概念
在這裏插入圖片描述

瀏覽器和 Session 關聯

Session 技術,底層其實是基於 Cookie 技術來實現的。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章