如果用户是第一次访问,则为该用户设定一个新的会话标识符。
检查URL所带会话标识符的合法性。如果会话标识符已经过期,则getSessionID方法返回一个新的会话标识符。
下面我们来看看getSessionID方法的工作过程。
String sessionId = request.getParameter("sessionId");
validSessionIdFound是一个标记,用于指示会话标识符是否合法。validSessionIdFound的初始值是false。
boolean validSessionIdFound = false;
long类型的now变量包含请求出现时的服务器时间。该变量用于确定用户会话的合法性。
long now = System.currentTimeMillis();
如果找到了会话标识符,则getSessionID方法检查它的合法性。检查过程如下:
一个合法的会话标识符必须有对应的同名文本文件。
如果存在与会话对应的文本文件,但文件已经过期,则原来的文件被删除。
把合法会话标识符所对应文本文件的最后修改日期改为now。
这些任务主要借助File对象完成,创建File对象的参数就是会话文本文件的路径:
if (sessionId!=null) {
File f = new File(path + sessionId);
if (f.exists()) {
if (f.lastModified() + timeOut > now) { // 会话合法// 使用setLastModified时,如果文件已经被其他程序锁定,// 程序不会产生任何异常,但文件数据不会改变f.setLastModified(now);validSessionIdFound = true; } else { // 会话已经过期 // 删除文件f.delete(); }} // end if (f.exists) } // end if (sessionId!=null)
如果不存在合法的会话标识符,则getSessionID方法生成一个会话标识符以及相应的文本文件:
if (!validSessionIdFound) { sessionId = Long.toString(now); // 创建文件 File f = new File(path + sessionId); try {f.createNewFile(); } catch (IOException&nbs