只是一个简单的问题。在登录时,我将每个用户放入数据库,因为有一次只有一个用户可以使用相同的用户名和密码登录。如果此用户已经在db中,则不允许用户进入。当用户注销时,我清除dB表并使Servlet中的会话无效。 现在,如果用户忘记注销,则会话显然将在例如过期。 20分钟左右 在web.xml中我创建了这个:
<listener>
<listener-class>com.servlets.dbclean</listener-class>
</listener>
然后这个dbclean类实现HttpSessionListener
,并在sessionDestroyed
方法中清除db。
我的问题:仅仅在这里进行这种数据库清理就足够了,因为当用户手动注销时,会话将被无效并且将调用此方法,或者我应该在/doLogout
Servlet上清理数据库并依赖当用户忘记注销时,在此监听器上?那么只使用这个Listener是一种保存方式吗?
答案 0 :(得分:2)
会话失效时会触发侦听器 - 超时或通过调用invalidate()
如果您不需要支持群集,只需将记录的用户存储在Set
内的ServletContext
内(在sessionCreated(..)
上执行,然后将其从在sessionDestroyed(..)
中设置。无需转到数据库 - 它都可以保留在内存中。(使用会话复制,您也可以在群集中执行此操作)