新人请教如何设置用户帐号只能一个地方登录
php吧
全部回复
仅看楼主
level 3
a914804173
楼主
rt,我使用的方法是数据库里设置 判定用户登录状态,登录后变为1 安全退出后为0
但是我发现 如果直接关闭页面的话就不会把登录状态改为0 之后就登录不了 求解决
2014年07月14日 02点07分
1
level 11
wj821200318
很好解决的。。 。。 可以那样的 ,你把登陆状态保存到memcache里面 然后设置过期日期,
1:登陆成功写入memcache里面,设置过期日期 , 设置另外的一个key为了判断当前是否登陆
2:登陆的时候判断 memcache里面是否有key 即可 有的话不让登陆
2014年07月14日 03点07分
2
a914804173
退出登录就删除那个key是吧 但是如果用户直接关闭页面没有退出怎么办?下次就不能登陆了
2014年07月14日 05点07分
wj821200318
回复 a914804173 :直接设置过期日期
2014年07月14日 06点07分
a914804173
回复 wj821200318 :谢谢
2014年07月14日 06点07分
level 8
hanyouchun66
单点登录,百度一下
2014年07月14日 06点07分
3
a914804173
能百度的话我还会来问吗
2014年07月14日 06点07分
level 1
冬夏祭
connection_aborted() 函数检查是否断开客户机。
如果已终止连接,则该函返回 1,否则返回 0。
2014年07月14日 06点07分
4
a914804173
谢谢
2014年07月14日 06点07分
快乐小神仙🍀
回复 a914804173 : 这个函数多用于配合flush()做无间断实时推处理的,对于你的问题没有太大用处。
2014年07月14日 07点07分
冬夏祭
回复 残剑无弦 :自己去试一下这个函数能不能判断关闭页面。一句if就能解决的问题,你非要在楼下扯出一大堆。
2014年07月15日 08点07分
level 7
快乐小神仙🍀
这个问题有很多解决方案:
1、Ajax定时请求 + 超时判定,也就是2楼说的,如果没有memcache,可以就用写入txt文本的方式储存,给上超时时间时间点,做判断就可以了。另外在客户端写个简单的js脚本,用setInterval()去定时发送一次在线请求给服务端用于更新超时时间。
这种方法多用于访问量比较少的地方,如ERP或管理后台等。缺点是如果给一些访问量大的页面,那么无疑是徒增了大量的交互线程占用。
2、iframe镶嵌 + connection_aborted()判定,这个方法就是在页面中内置一个0宽0高的iframe框架,内嵌一个PHP页面,如果连接中则将数据字段中的在线设置为online=1,如果连接中断则设置为online=0
这种方法在访问量大的页面中使用会产生高并发,服务器消耗可能大一些。
3、HTML5 socket + PHP socket判定,不过PHP不是很擅长socket,而且HTML5的socket api 不是所有浏览器都支持
...... 还有很多方法
2014年07月14日 08点07分
5
冬夏祭
任何一种提供通信功能的语言,它都具备了客户接入、接受消息、发送消息、客户离开四种基本功能。通过超时来判断是否处于连接状态,我只能说是你自己根本就没掌握这门语言。
2014年07月15日 08点07分
快乐小神仙🍀
回复 冬夏祭 : 我做过很多商城、ERP、社区应用等项目,对于判断是否断线这个问题曾经约了很多技术人员一起探讨过,最终的解决方案就是我上面的第一点,我不知道你是怎么试出来光一个connection_aborted就能判定的。
2014年07月15日 10点07分
冬夏祭
回复 残剑无弦 :哎哟,拿商城项目出来就把我吓到了。我之前做的一个项目,现在每天有20万个客户登录。主程是出身于国内某互联网巨头。曾负责某宝技术框架。人家用的方法就是自己所写协议里面的连接与断开。在现有协议面前,还要去通过超时来判断是否断开连接,我只能说程序员这行不是你们能进的。
2014年07月15日 11点07分
快乐小神仙🍀
回复 冬夏祭 : 我没有吓过你,只是拿项目实例出来说一下事而已,另外就是向你解释一下我不是新手,我掌握的语言有很多,不希望在技术探讨上面看到你充满火药味的回答,术业有专攻,每个人都有会和不会的地方。我承认我的技术没有达到能够在协议层做文章的程度,在协议上做文章也的确不适合大多数新手。
2014年07月15日 11点07分
1