Session对象(重点)
服务器端状态管理技术
session
session用于记录用户的状态,session指的是一段时间内单个客户端与web服务器的一连串相关的交互过程
在一个session中,客户可能会多次请求并访问同一个资源,也有可能请求访问不同的服务器资源
session原理
服务器会为每一次会话分配一个session对象
同一个浏览器发起的多次请求会属于一次会话(session)
首次使用到session时,服务器会自动创建session,并创建cookie存储sessionID发送给客户端
session是由服务器端创建
session使用
session作用域:拥有存储数据的空间,作用范围是一次会话有效
一次会话是使用同一浏览器发送的多次请求,一旦浏览器关闭,则会话结束
可以将数据存入session中,在一次会话的任意位置进行获取
可传递任何数据(基本数据类型、对象、集合、数组)
获取session
@WebServlet(name = "SessionServlet",value = {"/session"})
public class SessionServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//通过request对象获取session对象
HttpSession session = request.getSession();
System.out.println(session.getId());
}
Session保存数据
setAttribute(属性名,Object)保存数据到session中
session.setAttribute("key",value);//以键值对的形式存储在session作用域中
Session获取数据
getAttribute(属性名)获取session中的数据
session.getAttribute("key");//通过String类型的Key访问Object类型的value
Session移除数据
removeAttribute(属性名);从session中删除数据
session.removeAttribute("key");//通过移除session作用域中的值
Session与request应用区别
request是一次请求有效,请求改变,则request改变
session是一次会话有效,浏览器改变,则session改变
Session生命周期
开始:第一次使用到session的请求产生,则创建session
结束:
浏览器关闭,则失效
Session超时,则失效
session.setMaxInactiveInterval(seconds);//设置最大有效时间(单位:秒)
--------------------------------------------------------------------------------------
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
session.setMaxInactiveInterval(10);//设置session的有效期为10s
System.out.println(session.getId());
}
---------------------------------------------------------------------------------------
手工销毁,则失效
session.invalidate();//立即失效,登陆退出,注销
浏览器禁用cookie解决方案
浏览器禁用cookie的后果
服务器在默认情况下,会使用Cookie的方式将sessionID发送给浏览器,如果用户禁止cookie,则sessionID不会被浏览器保存,此时浏览器可以使用如URL重写这样的方式来发送sessionID
URL重写
浏览器在法报文服务器上某个地址时,不再使用原来的那个地址,而是使用经过改写的地址(即在原来的地址后面加上了sessionID)
实现URL重写
response.encodeRedirectURL(String URL) 生成重写的URL
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
String newUrl = response.encodeRedirectURL("/WebProject_war_exploded/getsession");
System.out.println(newUrl);
response.sendRedirect(newUrl);
System.out.println(session.getId());
}
声明:该博客为学习b站servlet教学视频的笔记,仅供以后复习之用