四、实现伪会话管理机制
下面所介绍的工程称为PseudoSession,它是伪会话机制一个很简单的实现。考虑到移植性,我们以JavaBean的形式实现它。PseudoSessionBean的完整代码可以从本文后面下载。
PseudoSessionBean拥有如下域(Field):
|
path是保存所有会话文本文件的目录。如果Web服务器的数量在一个以上,这个目录必须允许所有服务器访问。然而,为了防止用户直接访问这些文本文件,这个路径应该不允许用户直接访问。解决这个问题的一种方法是使用Web网站根之外的目录。
timeOut是用户的最后一个请求到会话过期作废之间的时间。在PseudoSessionBean的代码清单中,timeOut设置成了以毫秒表示的20分钟,这是一个比较合理的超时时间值。对于任何用户,如果他在这个超时时间之后才继续发出请求,他将得到一个新的会话标识符。
PseudoSessionBean有4个方法:getSessionID,setValue,getValue,deleteAllInvalidSessions。
4.1、getSessionID方法
getSessionID方法的声明如下:
|
这个方法应该在每一个JSP页面的开头调用。它完成如下任务:
如果用户是第一次访问,则为该用户设定一个新的会话标识符。
检查URL所带会话标识符的合法性。如果会话标识符已经过期,则getSessionID方法返回一个新的会话标识符。
下面我们来看看getSessionID方法的工作过程。
|
validSessionIdFound是一个标记,用于指示会话标识符是否合法。validSessionIdFound的初始值是false。
|
long类型的now变量包含请求出现时的服务器时间。该变量用于确定用户会话的合法性。
|
如果找到了会话标识符,则getSessionID方法检查它的合法性。检查过程如下:
一个合法的会话标识符必须有对应的同名文本文件。文件的最后修改时间加上timeOut应该大于当前时间。
如果存在与会话对应的文本文件,但文件已经过期,则原来的文件被删除。
把合法会话标识符所对应文本文件的最后修改日期改为now。
这些任务主要借助File对象完成,创建File对象的参数就是会话文本文件的路径:
|
如果不存在合法的会话标识符,则getSessionID方法生成一个会话标识符以及相应的文本文件:
|
程序保证文件名字随机性的方法非常简单:把当前的系统时间直接转换成会话标识符。对于那些涉及敏感数据的应用,我们应该考虑运用更安全的随机数生成器来生成会话标识符。
综上所述,getSessionID并不总是返回新的合法会话标识符:它返回的标识符可能与传递给它的标识符相同,也可能是新创建的会话标识符。
为了保证JSP页面拥有合法的会话标识符以便调用setValue、getValue方法,每个JSP页面都必须在开头位置调用getSesstionID方法。
相关专题
- Jsp完全攻略专题 (1574篇文章)
- JSP教程专栏 (1574篇文章)
- Jsp与Servlet (151篇文章)
- 用JFreeChart增强JSP报表的用户体验 (81次浏览)
- 解析Servlet/JSP会话跟踪机制 (34次浏览)
- 自行开发JSP HTTP服务器的绝对秘籍(二) (19次浏览)
- 整理近几天处理JSP页面中遇到的几个问题 (19次浏览)
- 我们还需要JSP吗? (18次浏览)
- 两级下拉框的JSP简单实现 (17次浏览)
- 在Apache中整合JSP和PHP (14次浏览)
- 深入讲解提升JSP应用程序的七个方法 (11次浏览)
- JSP/Servlet/JSF中对标签库的深入研究 (10次浏览)
- JSP/Servlet:Servlet/JSP会话跟踪机制 (7次浏览)



