====理论====
session描述
最原始的session是服务器端的一个Map结构的存储空间,但经常用的是HttpSession。
放入session的值可以在程序中的任何jsp,java类中进行读取。通常会将用户对象存入session,
session的内容不宜过多,有必要全局记录的数据,就可以放入session中进行存储。
多数量访问,session的存活时间不能太长,因为session是存活于服务器端的,占用资源。
Cookie和Session的区别
Session是存储于服务器端的,由服务器去销毁和创建
Cookie是存储于客户端的,可以由服务器端去销毁和创建也可以客户端去销毁
Cookie可以和Session一样,浏览器关闭时销毁
Session也可以和Cookie一样,保存长时间,只要SessionID不丢,Session的存活时间够长就可以实现。
Session是可以存储Object value的Map,而Cookie只能存储String value。
Session是单例的,Cookie就很随意了,但是request中中的Cookie数组只有一个。
session的创建
session是单例的,如果存在一个session,则不会再创建session。否则创建出一个session并生成一个sessionid并保存到Cookie中。
所以如果创建了session,就会创建一个叫JSESSIONID的cookie,其值为SessionID,保存在了客户端。只要创建了session,那么Cookie
的数量就至少为1.且存储SessionID的这个Cookie的MaxAge为-1,表示浏览器关闭,Cookie就被删除。
request.getSession();只要执行这句代码,就会创建session对象,如果存在,就指向对象。SessionID是不会变的。
jsp中的session
jsp中均可以访问session,因为jsp中翻译成servlet时,会隐式的加上HttpSession session = request.getSession(true);
所以在jsp中session是一个隐含的对象。所以只要第一次访问jsp就会创建一个session。
session存活时间限制
在web.xml中可以进行配置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<!--单位为分钟,如果为负数或0,表示不限制session-->
session的销毁
session的销毁原因归根结底是超时,长时间不使用就会被服务器销毁。
1,关闭浏览器(其本质还是超时)
因为保存SessionID的这个Cookie的MaxAge为-1,所以浏览器关闭后,Cookie就被删除了,所以SessionID就会丢失。
丢失后Session无法获取,获取不到就无法使用就会被倒计时,然后销毁。
根据这个原理,可以 实现浏览器关闭后继续使用原来的session。可以将保存SessionID的Cookie的MaxAge搞大点。单位是秒。
注意的是,记得要重新response.addCookie(Cookie);否则更改了MaxAge也是无效的。
2,超时,这是根本原因。
====应用====
session的添加和删除属性
session.setAttribute("key",Object value);添加属性
session.removeAttribute("key");删除属性
session描述
最原始的session是服务器端的一个Map结构的存储空间,但经常用的是HttpSession。
放入session的值可以在程序中的任何jsp,java类中进行读取。通常会将用户对象存入session,
session的内容不宜过多,有必要全局记录的数据,就可以放入session中进行存储。
多数量访问,session的存活时间不能太长,因为session是存活于服务器端的,占用资源。
Cookie和Session的区别
Session是存储于服务器端的,由服务器去销毁和创建
Cookie是存储于客户端的,可以由服务器端去销毁和创建也可以客户端去销毁
Cookie可以和Session一样,浏览器关闭时销毁
Session也可以和Cookie一样,保存长时间,只要SessionID不丢,Session的存活时间够长就可以实现。
Session是可以存储Object value的Map,而Cookie只能存储String value。
Session是单例的,Cookie就很随意了,但是request中中的Cookie数组只有一个。
session的创建
session是单例的,如果存在一个session,则不会再创建session。否则创建出一个session并生成一个sessionid并保存到Cookie中。
所以如果创建了session,就会创建一个叫JSESSIONID的cookie,其值为SessionID,保存在了客户端。只要创建了session,那么Cookie
的数量就至少为1.且存储SessionID的这个Cookie的MaxAge为-1,表示浏览器关闭,Cookie就被删除。
request.getSession();只要执行这句代码,就会创建session对象,如果存在,就指向对象。SessionID是不会变的。
jsp中的session
jsp中均可以访问session,因为jsp中翻译成servlet时,会隐式的加上HttpSession session = request.getSession(true);
所以在jsp中session是一个隐含的对象。所以只要第一次访问jsp就会创建一个session。
session存活时间限制
在web.xml中可以进行配置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
<!--单位为分钟,如果为负数或0,表示不限制session-->
session的销毁
session的销毁原因归根结底是超时,长时间不使用就会被服务器销毁。
1,关闭浏览器(其本质还是超时)
因为保存SessionID的这个Cookie的MaxAge为-1,所以浏览器关闭后,Cookie就被删除了,所以SessionID就会丢失。
丢失后Session无法获取,获取不到就无法使用就会被倒计时,然后销毁。
根据这个原理,可以 实现浏览器关闭后继续使用原来的session。可以将保存SessionID的Cookie的MaxAge搞大点。单位是秒。
注意的是,记得要重新response.addCookie(Cookie);否则更改了MaxAge也是无效的。
2,超时,这是根本原因。
====应用====
session的添加和删除属性
session.setAttribute("key",Object value);添加属性
session.removeAttribute("key");删除属性