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 技術來實現的。