1.Session
我们把这种基于唯一ID识别用户身份的机制称为Session
。每个用户第一次访问服务器后,会自动获得一个Session ID
。如果用户在一段时间内没有访问服务器,那么Session
会自动失效,下次即使带着上次分配的Session ID
访问,服务器也认为这是一个新用户,会分配新的Session ID
。一次Session
会话中往往包含着若干次request
请求。
JavaEE
的Servlet
机制内建了对Session
的支持。当我们需要获取Session
时,可以通过request
请求对象的getSession()
方法。
package com.wuhaohua.servlet;
import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@WebServlet("/ses.do")
public class SessionServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取会话
HttpSession session = req.getSession();
服务器识别Session
的关键就是依靠一个名为JSESSIONID
的Cookie
。在Servlet
中第一次调用req.getSession()
时,Servlet
容器自动创建一个Session ID
,然后通过一个名为JSESSIONID
的Cookie
发送给浏览器。
与控制台一致!
2.Cookie
Servlet
提供的HttpSession
本质上就是通过一个名为JSESSIONID
的Cookie
来跟踪用户会话的。除了这个名称外,其他名称的Cookie
我们可以任意使用。
创建一个新Cookie
时,除了指定名称和值以外,通常需要设置setPath("/")
,浏览器根据此前缀决定是否发送Cookie
。如果一个Cookie
调用了setPath("/user/")
,那么浏览器只有在请以/user/
开头的路径时才会附加此Cookie
。通过setMaxAge()
设置Cookie
的有效期,单位为秒,最后通过resp.addCookie()
把它添加到响应。
package com.wuhaohua.web.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/setcook.do")
public class SetcookiesServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("cookiesiiiiiiiiiiiii");
Cookie cookies1 = new Cookie("phone_number", "15719290065");
//设置过期时间
cookies1.setMaxAge(60*60*24*7);
//响应
resp.addCookie(cookies1);
}
}
3.总结
Servlet
容器提供了Session
机制以跟踪用户;- 默认的
Session
机制是以Cookie
形式实现的,Cookie
名称为JSESSIONID
; - 通过读写
Cookie
可以在客户端存储数据;