一、session的创建
1、当浏览器首次访问服务器资源的时候,服务器会自动的创建一个session,然后会将这个session存到cookie中,响应回浏览器。该cookie的key ,默认为:JSESSIONID
2、当浏览器下一次来访问服务器的时候,会默认在请求头信息中带上这个cookie,此时服务器可以通过这个默认的cookie,找到对应的服务器资源,最终响应给浏览器。
3、所以说,session最终还是要依赖cookie来实现的。
4、关于session的几个API方法
获取当前会话下的session信息,注意:如果session已经存在,则服务器不会在创建默认的session,如果不存在,则会创建
request.getSession();
获取当前会话下的session信息,如果为false,则表示,如果没有session,则不会创建,如果为true,则和上面描述一致
request.getSession(boolean var1);
获取session的JSESSIONID
session.getId();
二、session销毁的四种方式:
1、强制销毁:直接调用 session.invalidate() 方法
2、session自动超时:30分钟默认
3、设置session的最大活跃时间:即调用 session.setMaxInactiveInterval()方法,单位秒,
4、java web项目中,对web.xml文件进行配置,设置session的有效时间,单位默认是分钟
<sessiong-config> //设置session的有效时间,单位分钟 <session-timeout>1</session-timeout> <sessiong-config>
三、session销毁之后数据的丢失和保存
1、一般情况下,服务器重启,session会销毁,数据会丢失,如果要保留数据,那么对象必须要实现序列化,即实现 IO的 Serializable接口
通过序列化,把session数据持久化到磁盘中,生成文件,做到数据的不丢失,等一下次启动服务时,
再通过反序列化,把磁盘中的session数据持久化到内存中,这样就可以取到数据,响应给浏览器
2、小知识点:
把序列化的存储过程称为:** 钝化-搁置 ** ,在服务器重启或者内存溢出的时候会出现该情况。
把反序列化的存储过程称为:活化-激活