Ali*_*sam 4 java sql session jsp servlets
当用户登录我的Web应用程序时,我创建了一个会话:
session.setAttribute("SessionNumber","100");
Run Code Online (Sandbox Code Playgroud)
并且他的用户名被添加到名为ONLINE_USERS.
Other Online的用户将能够看到他,他们看到所有在线用户
当用户单击注销按钮时,我从表中删除该行,然后使用以下命令删除会话:
session.invalidate();
Run Code Online (Sandbox Code Playgroud)
但是让我们说用户已经存在浏览器,他的会话将会消失,但该行将作为在线用户留在数据库中,如何避免这种情况?
我在Netbeans上使用JSP-Servlets.
您可以启用自定义HttpSessionListener以在会话失效时删除表行.
public class YourHttpSessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent event) {
//put row in the database
}
public void sessionDestroyed(HttpSessionEvent event) {
//delete the row from database
}
}
Run Code Online (Sandbox Code Playgroud)
在web.xml中声明监听器:
<listener>
<listener-class>YourHttpSessionListener</listener-class>
</listener>
Run Code Online (Sandbox Code Playgroud)
请注意,在用户退出浏览器并且其会话在服务器上到期之间会有延迟.但会话到期时间是可配置的.您应该找到合适的到期超时:不要太长,这样您就不会在线显示过多的离线用户,但也不能太短以至于不能让连接的用户空闲.
我认为这对于使用基础servlet和jsp技术开发的聊天应用程序来说是一个很好的折衷.
| 归档时间: |
|
| 查看次数: |
1956 次 |
| 最近记录: |