JSP —— 内置对象 Cookie 与 Session

来源:互联网 发布:靠谱的淘宝化妆品代购 编辑:程序博客网 时间:2024/06/08 03:17

一、Session

表示javax.servlet.http.HttpSession对象。Session对象可存储用户的状态信息。

Session在第一个JSP 页面被装载时自动创建,完成会话期管理。会话含义:从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束(当然这只是默认的),即为一个会话。

Session对象作用:客户访问服务器时,可能在这个服务器的几个页面之间反复连接,或反复刷新一个页面,服务器应当通过某种办法(如cookie)知道这是同一个客户,这就需要Session 对象。

简单理解:

Session就是服务器端用于管理会话的对象,每个会话都会有唯一的ID 标识,当然该ID 在JSP 中的真正名称为JSESSIONID(可通过浏览器开发者工具network查看)。每次HTTP请求或响应时,该JSESSIONID 都必须被带在HTTP 头中,在JSP 引擎上会自动完成验证以辨别客户端身份。默认的会采用Cookie的方式传递JSESSIONID ,但若浏览器不支持(感觉应该不存在这种情况吧),或用户禁用了浏览器Cookie功能,则应该通过URL 重写的方式将此值加在url后,JSP 中有对应的response对象的encodeURL与encodeRedirectURL方法完成此功能。当然会话只是临时的,所以服务器端需要在适当的时间保存session中用户操作信息,如网上商城用户的订单等,并保存进数据库。


一次请求服务器端页面的HTTP 信息:(浏览器启用了Cookie)

画红线的Cookie是访问JSP页面时自动写进HTTP 头的,且只存在于请求头,因为该JSESSIONID是第一次访问网站时自动保存在浏览器端,每次从该网站的页面请求其它页面,都会自动写进HTTP请求头中,以便在服务器端用于身份验证。


一次请求服务器端页面的HTTP 信息:(浏览器禁用了Cookie)

如果浏览器禁用了Cookie,则默认的使用Cookie传递JSESSIONID 的功能无法实现,此时若不作任何处理,会发现从一个页面请求另一页面,其会话ID是新的,因为JSP 引擎无法在HTTP 请求头中发现Cookie头字段,更找不到JESSIONID cookie,所以认为是一个新的用户,新建了SESSION。解决此问题,需要使用response的encodeURL或encodeRedirect方法重写url,当然保险的做法是任何时候都使用上重写url的函数,因为在无需重写url时(即Cookie功能可用)函数返回的是未重写过的url。示例:

<a href=<%=response.encodeURL("testEncode.jsp") %>>链接到testEncoding页面</a>
浏览器禁用Cookie,看到地址栏显示url:



说明:服务器此时会根据url中尾部的附带信息辨别用户。


Cookie功能不可用时,使用request.getCookies()将导致错误,所以可先通过js判断浏览器是否支持cookie或提醒用户打开cookie功能。参考:JS判断Cookie是否可用


session处于有效状态但未活动情况下,仍然是占用服务器内存资源的,如果同一时间有大量用户请求时,这些未活动的session占用资源的问题带来的影响更大,为此对那些不活动的session暂时保存进文件系统或数据库是有必要的,这就是session的持久化。查看:使用url重写实现session跟踪


二、Cookie

Session存在于服务端,Cookie存在于客户端,用于保存会话ID 与其它用户信息等。



0 0
原创粉丝点击