网站单例登录

实现网站的单例登录:

    1, 在用户表里增加一个判断登录状态的字段,如 loginStatus  0,表示未登录,1,表示已登录。

    2, 当用户登录时查询此属性,如果为 0  可登录,如果是 1 表示已有人登录,不可在登录。

    3, 用户如果已登录,将loginStatu为1的用户实例放入到 Session  中。

    4, 当用户点击后台退出按钮时,我们可以update用户实例的loginStatus 为 0。此为正常流程。

    5, 但如果用户没有点击后台退出按钮,直接关闭浏览器退出,该如何办。??

  解决方案:

使用  HttpSessionListener  监听

A..服务器 会在每次新的会话(客户端打开一个新的页面)时 产生一个带有唯一ID的默认Session,并触发 HttpSessionListener 的 public void sessionCreated(HttpSessionEvent event) 方法

B..当默认Session过期时触发HttpSessionListener的 public void sessionDestroyed(HttpSessionEvent event) 方法。

使用代码如下:

 

public class MySessionListener implements HttpSessionListener {
	//默认session创建时调用此方法。
	public void sessionCreated(HttpSessionEvent event) {
		//得到session
		HttpSession session=event.getSession();
				
	}
	//默认session销毁时调用此方法。
	public void sessionDestroyed(HttpSessionEvent event) {
		//得到session
		HttpSession session=event.getSession();
		//根据admin取出放置在session里面的用户的实例。
		Object object=session.getAttribute(admin);
		if(object!=null){
			Admin admin=(Admin)object;
			if(admin.getLoginStatus()==1){
				admin.setLoginStatus(0);//登录状态:0,未登录。1,已登录。
				//调用数据库链接更新Admin的状态.
			}
			
		}
	}

}

  登录部分代码如下:

           adminCheck.setLoginStatus(1);//1表示登录状态。
           this.adminManagerImp.updateAdmin(adminCheck);
	session.put("admin", adminCheck);
	

 最后需要注意的:

             如果服务器意外重启,应在服务器重启后自动更新用户的登录状态。!!!

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值