我想创建一个 PHP Web应用程序,其中在一台PC上一次只能有一个身份验证会话,即使用 Firefox 用户A 登录,但用户B 无法在同一台PC上使用 IE 登录
如果从服务器端询问,浏览器之间的Google会话共享无法完成
答案 0 :(得分:2)
理论上,您可以使用session_id()和数据库条目执行此操作,但安全性会很棘手,因为恶意用户可能会尝试生成随机会话ID以模仿已登录用户的会话。
会话信息存储在客户端浏览器中的cookie中,具有指定的ID。通过存储该ID和数据的JSON字符串,无论何时更新,各种用户都可以想象共享相同的数据。他们都必须偶尔轮询服务器以查看数据是否已被更改。
但是在那时,你不再需要使用$_SESSION
了,所以它几乎打败了你的问题的目的。您可以使用常规变量获得相同的行为,这已经是一种安全性改进。
简短回答:不,这不是会议的重点。
答案 1 :(得分:1)
您可以创建登录脚本,以便在登录时检查用户是否已经入住。如果已登录,则会拒绝进一步登录。
如上所述,PHP可以在数据库中存储会话ID。检查数据库是否存在,然后根据它允许或不允许。
答案 2 :(得分:0)
您可以使用识别设备的签名算法来完成此任务(假设您与不会尝试欺骗用户代理和其他技巧的普通用户合作)。您的算法可以包含您认为合适的变量。
例如REMOTE_ADDR,USER_AGENT。通过在客户端执行基于闪存的代码,可以获得其他特殊变量。当每个请求进入时,您可以将其与经过身份验证的现有密钥进行比较,如果您获得一个除了浏览器字符串之外所有变量都匹配的新会话,您可以安全地假设使用不同浏览器的同一用户。
您必须使用闪存组件收集额外的变量才能生效。通过$ _SERVER提供的变量是不够的。因为可能有代理人背后的用户而你不想将它们识别为误报。