[quote][b][color=darkred]3、Session技术[/color]
[color=green](1)什么是session[/color]
会话
在服务器端维护客户端状态的一种状态管理技术。
其基本思想是:当浏览器访问服务器时,服务器会
创建一个对象(session对象,该对象有一个唯一的
id,也称为session id)。[color=indigo]服务器会将该id采用cookie的方式(默认情况下)。
发送给浏览器,浏览器下一次访问服务器时,会将
该id携带给服务器,服务器依据该id找到对应的
session对象。浏览器操作所涉及到的数据可以保存到
session对象里。
[/color]
[color=green](2)session的使用[/color]
A.如何获得session?
session只能由服务器创建。
HttpSession session = request.getSession();
方法一:request.getSession();
方法二:request.getSession(boolean flag);
request.getSession(true):
执行过程:
当请求到达服务器,执行到这行代码,服务器
会查看请求中有无sessionId,若无,则创建一个
session对象。若有,还要看该sessionId所对应
的session对象是否还存在(服务器不会永久
保存一个session对象,sesion对象会有一个
失效时间,对于tomcat,30分钟,超过这个时间,就
会删除)。若不存在,再创建一个新的,否则,
返回原有的那个session对象。
request.getSession(false):
当请求到达服务器,执行到这行代码,服务器
会查看请求中有无sessionId,若无,返回null,
若有,如果sessionId对应的session对象还存在,
则返回该对象,若不存在,返回null。
[u]request.getSession() == request.getSession(true)。[/u]
[color=green]B. 如何存取数据[/color]
session.setAttribute(String key,Object value);
注意 value类应用实现序列化接口。
Object session.getAttribute(String key);
session.removeAttribute(String key)
[color=red]//[u]注意:向session中添加的对象必须是可序列化的,[/u]因为服务器在正常关闭时,会将内存中的session保存到硬盘中,然后在启动的时候在以流的形式反序列化成对象存放到内存当中,这样session中的sessionId和其他数据就会保持与服务器关闭之前的状态保持一至,这样不会影响到客户端的变化。
[/color]
小例子
计数。
C. session的最大不活动时间
session.setMaxInactiveInterval(int seconds);
如果超过该时间,服务器会将session对象删除.
[color=olive]默认情况下,对于tomcat,默认是30分钟。
在conf\web.xml中配置
<session-config>
<session-timeout>30</session-timeout>
</session-config>[/color]
服务器默认情况下,是通过cookie机制,将
sessionId发送给浏览器,服务器会通过如下
代码:
Cookie c = new Cookie("jsessionId","123");
c.setPath("/appName");
也就是说,浏览器一关闭, 该cookie就会删除,
此时,即使服务器端的session对象还存在,
该对象对浏览器也无意义了。
[color=green]D. 立即让session对象失效。[/color](一般用于用户正常退出)
session.invalidate()。[/b][/quote]
[color=green](1)什么是session[/color]
会话
在服务器端维护客户端状态的一种状态管理技术。
其基本思想是:当浏览器访问服务器时,服务器会
创建一个对象(session对象,该对象有一个唯一的
id,也称为session id)。[color=indigo]服务器会将该id采用cookie的方式(默认情况下)。
发送给浏览器,浏览器下一次访问服务器时,会将
该id携带给服务器,服务器依据该id找到对应的
session对象。浏览器操作所涉及到的数据可以保存到
session对象里。
[/color]
[color=green](2)session的使用[/color]
A.如何获得session?
session只能由服务器创建。
HttpSession session = request.getSession();
方法一:request.getSession();
方法二:request.getSession(boolean flag);
request.getSession(true):
执行过程:
当请求到达服务器,执行到这行代码,服务器
会查看请求中有无sessionId,若无,则创建一个
session对象。若有,还要看该sessionId所对应
的session对象是否还存在(服务器不会永久
保存一个session对象,sesion对象会有一个
失效时间,对于tomcat,30分钟,超过这个时间,就
会删除)。若不存在,再创建一个新的,否则,
返回原有的那个session对象。
request.getSession(false):
当请求到达服务器,执行到这行代码,服务器
会查看请求中有无sessionId,若无,返回null,
若有,如果sessionId对应的session对象还存在,
则返回该对象,若不存在,返回null。
[u]request.getSession() == request.getSession(true)。[/u]
[color=green]B. 如何存取数据[/color]
session.setAttribute(String key,Object value);
注意 value类应用实现序列化接口。
Object session.getAttribute(String key);
session.removeAttribute(String key)
[color=red]//[u]注意:向session中添加的对象必须是可序列化的,[/u]因为服务器在正常关闭时,会将内存中的session保存到硬盘中,然后在启动的时候在以流的形式反序列化成对象存放到内存当中,这样session中的sessionId和其他数据就会保持与服务器关闭之前的状态保持一至,这样不会影响到客户端的变化。
[/color]
小例子
计数。
C. session的最大不活动时间
session.setMaxInactiveInterval(int seconds);
如果超过该时间,服务器会将session对象删除.
[color=olive]默认情况下,对于tomcat,默认是30分钟。
在conf\web.xml中配置
<session-config>
<session-timeout>30</session-timeout>
</session-config>[/color]
服务器默认情况下,是通过cookie机制,将
sessionId发送给浏览器,服务器会通过如下
代码:
Cookie c = new Cookie("jsessionId","123");
c.setPath("/appName");
也就是说,浏览器一关闭, 该cookie就会删除,
此时,即使服务器端的session对象还存在,
该对象对浏览器也无意义了。
[color=green]D. 立即让session对象失效。[/color](一般用于用户正常退出)
session.invalidate()。[/b][/quote]