日期:2014-05-17  浏览次数:20465 次

关闭浏览器,清空session问题,怎样限制一个用户不能同时登陆【求解】
做后台时,一个用户在登录中,如果再次登陆,则提示在用户已登录,不能同时登陆,我现在做的是如果用户登陆成功就更新下数据库中一个字段,登陆时判断这个字段=1则不能登陆,点击的设定的退出按钮,则吧这个字段更新为0,那么下一次登陆的时候一样可以正常登陆。。。。但是,如果用户点击直接关闭浏览器,我该怎么触发事件,更新下数据库字段呢?或者有别的什么方法,求解,给链接也先谢谢!

------解决方案--------------------
你不用写进数据库。
你可以登录的时候,写进一个cookie,当用户点退出时,清除cookie值。当用户重复登录时,就判断这个cookie值是否存在,如果存在,提示已登录,如果不存在,就可以登录。
当用户关闭浏览器时,系统也会自动删除cookie.
------解决方案--------------------
探讨
引用:
引用:
你不用写进数据库。
你可以登录的时候,写进一个cookie,当用户点退出时,清除cookie值。当用户重复登录时,就判断这个cookie值是否存在,如果存在,提示已登录,如果不存在,就可以登录。
当用户关闭浏览器时,系统也会自动删除cookie.

cookie不是太明白,如果在不同的机器上登陆呢……

------解决方案--------------------
我以前做这个大概思路是这样的,一个用户登录的时候创建一个票据,放在memcached里面(存一个键值对,key值(账号)和内容),同时把这个票据作为cookie下发下去,这个用户在访问每个页面的时候都会提取cookie里面的票据和memached里面的票据比较。这时如果其他人用这个账号在异地登录的时候,这个账号就会在memached里面更新这个账号所对应的票据,这时先登录的那个人用自己cookie里面的票据和memcached里面的票据比较的时候就不一致了,这样就把先登录的那个人T出去。
memcached其实就是一个地方来存储这些票据Cache Session同样能达到这样的目的。
我这儿只说了一个大概的思路,具体做的过程中还是比较复杂,希望能给你点帮助。
------解决方案--------------------
综合楼上各个答案

1. Session :可以使用针对某一用户的唯一标识生成Session内容,但是不要用这个数据去当做登录凭据,因为固定的就会被盗用。
2.数据库存储Status: 退出可以清空,直接关闭浏览器可以使用onbeforeunload或者onunload事件,让页面在临死前跟数据库道个别。
3.Cookie不可用:因为这个不能防止用户在不同机器上多开。

4.登录后给客户端发送一个自定的序列码,用户与该码唯一对应,只存储一个这样的码,分两个状态:1'用户没登陆,数据库中也找不到对应的码;2'用户登录,将码生成,对应数据库,持有这个码的该用户才能登陆,如果这个码存在则不重新生成。 客户端或浏览器每隔一段时间像Server发送自己的身份唯一标识和这个码,如果一段时间没发,则数据库清空该码(这相当于自造Session也可用)