17-Session
session 17
2023-06-13 09:14:07 时间
Session
概念
服务器端会话技术,再一次对话的多次请求间共享数据,数据存储在服务器端的对象中(HttpSession)
基本用法
获取HttpSession对象
HttpSession session=request.getSession();
使用HttpSession对象
//存储数据
session.setAttribute("msg","hello_world");
//获取数据
Object msg=session.getAttribute("msg");
//移除数据
session.removeAttribute("msg");
原理
Session的实现依赖于Cookie,在一次会话中,第一次请求Session的过程中,服务器端会创建一个Cookie对象,用来存储该Session的ID,并写入响应头返回到客户端,在客户端下次访问时,服务器端检测到该Cookie并读取Session的ID,就能够在浏览器端找到该Session并返回客户端
注意
客户端关闭后,服务器端不关闭的情况下,两次获取的Session默认情况下不是同一个,也就不能共享数据(这是因为客户端关闭,代表一次会话结束,同时携带JSESSIONID的cookie也被销毁,所以Session失效)
通过创建一个同名Cookie并设置Cookie的持久化处理,可以解决上面的问题
//获取Session
HttpSession session=request.getSession();
//创建JSESSIONID的Cookie 设置最大存活时间
Cookie cookie=new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(60*60);
response.addCookie(cookie);
//存储数据
session.setAttribute("msg","hello_world");
服务器端关闭的情况下,两次获取的Session对象不是同一个,但要保证数据不丢失,所以服务器端会进行Session的钝化与活化
- Session的钝化:在服务器正常关闭之前,将服务器上的Session对象序列化到硬盘中
- Session的活化:在服务器启动后,将硬盘中的Session文件转化为内存中的Session对象
Session被销毁的情况
- 服务器关闭
- session对象调用invalidate方法
- session默认失效时间30min
特点
- session用于存储一次会话的多次请求的数据,存储在服务器端
- session可以存储任意类型,任意大小的数据
Session与Cookie的区别
- Session存储数据在服务器端,Cookie在客户端
- Session对存储数据的类型和大小没有限制,Cookie有限制
- Session更安全,Cookie相对而言不安全
相关文章
- stimulsoft mvc html,asp.net mvc – stimulsoft report mvc kill session – Stack Overflow
- IIS服务器中 ASP.NET State Service 开启后 Session 仍容易丢失的问题终极解决办法
- ORA-41030: Session id not specified ORACLE 报错 故障修复 远程处理
- ORA-41208: OCI error during session state capture and restore ORACLE 报错 故障修复 远程处理
- PHP session_start():开启Session
- Oracle 视图 DBA_AUDIT_SESSION 官方解释,作用,如何使用详细说明
- Oracle 视图 V$SESSION_FIX_CONTROL 官方解释,作用,如何使用详细说明
- Oracle 视图 V$SESSION_WAIT_HISTORY 官方解释,作用,如何使用详细说明
- MySQL Status Ssl_used_session_cache_entries 数据库状态作用意思及如何正确
- PHP替代session的方法详解编程语言
- JSP Response.getAttributeNames()方法:获取session对象的所有属性名称
- 实现分布式session共享基于SSM框架的Redis分布式Session共享实现(ssm 结合redis)
- 对Session和Cookie的区分与解释
- CI框架Session.php源码分析