[Tapestry4] 判断session过期事件

wobu20 2007-09-03
请问,tapestry里面判断session过期的事件是哪一个?

例如,用户登录后,把用户信息存在session对象里面,并把用户表中的state属性改为在线,想实现的效果是,用户退出登录后,自动把state属性改为离线,用户如果是正常退出的话,大概知道如何实现,但是,如果用户是直接关闭浏览器页面的话,该如何判断呢?有没有什么事件来判断?这样的话就可以把状态修改的代码写在里面了!
superaxis 2007-09-03
这个不是tapestry的问题,这个是Servlet容器的问题了,
采用 Session Listener 的方式可以满足你的要求。


Jun Tsai

wobu20 2007-09-03
谢谢楼上的指正,再请问一下,tapestry是不是有对session的处理进行封装?
superaxis 2007-09-03
wobu20 写道
谢谢楼上的指正,再请问一下,tapestry是不是有对session的处理进行封装?



好像没有,好像仅仅对Request和Response进行了封装。

Jun Tsai
wobu20 2007-09-03
再次感谢superaxis大哥的帮忙!
zhaoyl 2007-09-06
wobu20 写道
请问,tapestry里面判断session过期的事件是哪一个?

例如,用户登录后,把用户信息存在session对象里面,并把用户表中的state属性改为在线,想实现的效果是,用户退出登录后,自动把state属性改为离线,用户如果是正常退出的话,大概知道如何实现,但是,如果用户是直接关闭浏览器页面的话,该如何判断呢?有没有什么事件来判断?这样的话就可以把状态修改的代码写在里面了!



最近也在做session的过期问题 请楼主看到 留下您的MSN 有事情请教
zhaoyl 2007-09-06
或者QQ 也行 我的QQ是252574345
wobu20 2007-09-06
回楼上同志,我处理的代码如下:
java代码:
package com.myso.tapestry.engine;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

import com.myso.bo.UserLogin;
import com.myso.service.LoginService;

public class MyVisit implements HttpSessionBindingListener{

	private UserLogin userLogin;

	private LoginService loginService;
	
	public UserLogin getUserLogin()
	{
		return userLogin;
	}
	
	public void setUserLogin(UserLogin userLogin)
	{
		this.userLogin=userLogin;
	}
	
	public LoginService getLoginService(){
		return loginService;
	}
	
	public void setLoginService(LoginService loginService)
	{
		this.loginService=loginService;
	}
	
	public String toString()
	{
		String s="用户ID:"+userLogin.getId()+"\n";
		s+="用户登录名:"+userLogin.getLoginName()+"\n";
		s+="用户昵称:"+userLogin.getNickName()+"\n";
		return s;
	}

	public void valueBound(HttpSessionBindingEvent arg0) {
	}

	/*
	 * session过期时执行数据库操作
	 * @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(javax.servlet.http.HttpSessionBindingEvent)
	 */
	public void valueUnbound(HttpSessionBindingEvent arg0) {
		getLoginService().userLogout(userLogin.getId());      //user退出登录,设置状态为离线
	}

}


这样做可以实现session过期(在web.xml中设置时间)后,触发valueUnbound(HttpSessionBindingEvent arg0)事件,执行清除状态操作。

但这样做的话,如果用户直接关闭页面的话,没有办法马上清除session,仍然要等到过期后才会清除,是否要在javascript里面判断关闭事件,然后调用相应方法?

还有一种可能性是:用户正常登录(session未过期),但服务器突然遇到问题关闭掉,这么一来,用户状态就被锁定住了,无法恢复!想到的解决方法是,在服务器启动的时候执行一个初始化方法,实现的功能是执行一个数据库操作,将在线用户状态全部改为离线(因为服务器刚重启,不会有人在线的~:))。

这样设计似乎乱七八糟,没什么经验,谁有好方法的话一定要回我哦,谢谢!!!

不过应用程序初始化事件该如何配置?有看到一个帖子,但是按照里面的配置似乎有问题,所以还得请教各位大哥!
jveqi 2011-01-02
session 监听器啊
汤姆猫 2012-01-04
session监听啊!
Global site tag (gtag.js) - Google Analytics