您的位置:首页 > 其它

Web应用程序状态管理

2013-07-01 23:28 323 查看
1 状态跟踪:

由于http协议是一种无状态的协议,当请求和响应完成后,连接会断开,以释放服务 器的资源。这时每次请求到达后,服务器都会认为是新用户,这就是无状态。但是很多 时候,服务器又需要保存客户端的状态进行一些商务活动,如:用户的登录、购物车信 息。这时就需要状态跟踪。

2 状态跟踪的方式:

1 隐藏表单

2 cookie

3 session

4 url重写

3 cookie工作流程:

客户端访问服务器,服务器调response.addCookie(),那么就会产生set-cookie响应头,将cookie对象中封装的信息以键值对文本方式发送给客户端。客户端再次请求,就会将之前服务器给客户端的cookie信息再次请求头的方式发给服务器,以跟踪状态。

Cookie分两种:

1 放置在客户端浏览器缓存中,当浏览器关闭,cookie消失。

2 放置在客户端文件中,当浏览器关闭,cookie不会消失,只有过期时间到了,才会消 失。(设置时间  setMaxAge(),里面参数为秒)

4 Session的工作流程:

当客户端访问服务器,服务器调用request.getSession().产生一个httpSession对象,用来保存客户端信息。一个用户就分配一个session对象。同时给该session对象产生一个唯一标识:sessionId.然后以sessionId为键,以session对象为值加入一个map 集合。产生响应信时会将时,会将sessionId以set-cookie响应头的方式发送给客户端。当客户端再次请求,会将sessionId以cookie请求头的方式再次发送给服务器,服务器根据sessionId找到对应的session对象,从而跟踪状态。

 

5 request.getSession()有一个重载方法request.getSession(boolean),当boolean变量为true,表示如果没有当前会话,创建一个新的会话对象。如果有当前会话,直接取出来。当boolean变量为false,表示有当前会话,直接取出,没有当前会话,返回null,request.getSession()等价于request.getSession(true)。

HttpSession session=request.getSession();

//在session中封装数据,作用范围在一次会话中

session.setAttribute(“aaa”,”111”);

6 session是服务器的对象,当客户端浏览器关闭并不意味session消失。

7 session的销毁方法有:

1)session超时。通过设置超时时间来销毁session,如果在指定时间之内,session有效, 超过时间,服务器会认为客户端下线,就会将session对象销毁,以释放服务器资源。

session.setMaxInactiveInterval(秒)。如果为-1,就永不销毁。

还可以在web.xml中设置。

 <session-config>

        <session-timeout>30</session-timeout>

 </session-config>

以分钟为单位。

2)调用invalidate(),强行销毁session

3)服务器崩溃或重新部署

8 session与cookie区别:

1)session是服务器对象;cookie是一段文本

2)Session数据放在服务器;cookie数据放在客户端

3)Session可以封装对象;cookie只能封装文本。

9 url重写:

Session对象通常需要使用cookie来传输sessionId,一旦客户端浏览器将cookie禁用,这时sessionId就不能从客户端再传递给服务器了。这时服务器就认为客户端是新用户,不能再跟踪状态。

10 url重写原理:

将sessionId强行附加在url后面,这样就算客户端禁用cookie,服务器同样能得到sessionId从而能在客户端禁用cookie的情况下,跟踪状态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: