会话超时和注销时的数据库清理

时间:2011-02-27 19:13:23

标签: session servlets session-timeout

只是一个简单的问题。在登录时,我将每个用户放入数据库,因为有一次只有一个用户可以使用相同的用户名和密码登录。如果此用户已经在db中,则不允许用户进入。当用户注销时,我清除dB表并使Servlet中的会话无效。 现在,如果用户忘记注销,则会话显然将在例如过期。 20分钟左右 在web.xml中我创建了这个:

<listener>
    <listener-class>com.servlets.dbclean</listener-class>
</listener>

然后这个dbclean类实现HttpSessionListener,并在sessionDestroyed方法中清除db。 我的问题:仅仅在这里进行这种数据库清理就足够了,因为当用户手动注销时,会话将被无效并且将调用此方法,或者我应该在/doLogout Servlet上清理数据库并依赖当用户忘记注销时,在此监听器上?那么只使用这个Listener是一种保存方式吗?

1 个答案:

答案 0 :(得分:2)

会话失效时会触发侦听器 - 超时或通过调用invalidate()

如果您不需要支持群集,只需将记录的用户存储在Set内的ServletContext内(在sessionCreated(..)上执行,然后将其从在sessionDestroyed(..)中设置。无需转到数据库 - 它都可以保留在内存中。(使用会话复制,您也可以在群集中执行此操作)

相关问题