我正在尝试同时禁止同一用户多次登录我的CakePHP(1.2)驱动网站。但是,这并不像我想象的那么容易,因为如果用户已经登录,我不知道如何获取信息。
我正在使用Cake的Auth组件来验证用户身份。会话由php安装处理,php将会话数据存储在文件中。所以我猜不可能从控制器访问会话数据(当然,这些文件不会保存在webroot中)。我想过通过使用特殊的数据库字段来检查用户是否登录但是如果用户没有使用注销方法但是只是关闭他的浏览器并且没有办法注销用户是否已注销所以结束会议。
有人能想到另一种方法来管理吗?我不需要知道每个登录用户的所有数据。我唯一需要知道的是,目前是否登录了给定的用户名。
提前致谢。
答案 0 :(得分:3)
我认为如果您在核心配置文件中将Security.level
设置为high
,CakePHP将自动出现此行为,因为它每次都会重新生成会话ID。
Configure::write('Security.level', 'high');
或者,它背后的逻辑是你可以在登录时在用户表中保存用户IP /用户代理的哈希,并且如果与你保存的哈希有不同哈希的计算机试图做某事,注销用户。这样只有最新的用户才能使用。