会话
会话字面意思:一次交流或交谈
servlet会话
指的是用户打开一个浏览器,访问一个网站,只要不关闭该浏览器,不管用户点击多少个超链接,访问多少个资源,直到用户关闭浏览器,整个过程称为一次会话。
会话范围:打开网站,完成所需要的所有需求,是一次会话
浏览器记忆:Cookie
服务器的记忆:Session
怎么算会话结束
- 客户端关闭了
- 服务端销毁了
Cookie
在浏览器端记录一些信息
这个响应头的信息是一个键值对
set-Cookie:name = wl
原理:设置响应头,浏览器接受响应头保存,然后浏览器下次的请求都会带着这个头的信息
response.setHeader("setCookie","name = wl")
服务器发送cookie
Cookie cookie = new Cookie("name","wl");
Response.addCookie(Cookie);
服务查看用户带来的请求是否有cookie
Cookie[] cookies = Request.getCookie();
//可以使用cookie来验证用户是否来过
//判断cookies是否为空,然后遍历即可
Cookie.getName();
Cookie.getValue();
测试用户是否来过
Cookie[] cookies = request.getCookies();
Cookie nameCookie = c;
if (cookies != null){
for (int i = 0; i < cookies.length; i++){
if (cookie.getName().equals("name")){
nameCookie = cookie;
}
}
}
if (nameCookie != null)
System.out.println(nameCookie.getValue());
Session
在服务器记录一些信息
只要客户端一旦连接上服务器,服务器就会自动产生Session;
一个连接对应一个session,session可以在一个会话中传递信息;
通过setAttribute设置值。
通过getAttribute获得值。
由服务器端控制,服务器如果重启了,信息就会丢失!
package com.westos.serlvet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class SessionTest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决乱码问题:
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
//Session由服务器自动创建,如何获得session
//HttpSession 得到的sessioin对象
HttpSession session = req.getSession();
//得到sessionID,一次会话,一个seesionID;
String id = session.getId();
resp.getWriter().println("获得的sessionId:\n"+id);
String name = "welong";
//向session中存入一个值;
session.setAttribute("name",name);
resp.getWriter().println("存入信息成功:"+name);
}
}
package com.westos.serlvet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
//获得session存入的值
public class SessionTest2 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决乱码问题:
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
//获得
HttpSession session = req.getSession();
System.out.println("得到的SessionID:"+session.getId());
String name = (String) session.getAttribute("name");
resp.getWriter().println("得到的session存入的信息"+name);
//Servlet < Seesion < WebContext
}
}
Session的寿命
session.setMaxInactiveInterval(int interval);
sessionID的存在时间就是cookie的时间,可以通过获取cookie设置setMaxAge控制
Session方法:
boolean session.isNew() // 判断session是否是新的,即session是否是第一次访问,访问第二次就是旧的
session.getCreationTime() // 获取session创建事件
session.getID() // 获取session的ID
session.getLastAccessTime() // 获取最后一次访问session的时间
session.getMaxInactiveInterval(60) // 设置session最大有效时间60s
session.invalidate(); // 立即销毁session