3

我想制作一个PHP Web 应用程序,其中在一台 PC 上一次只能有一个身份验证会话,即用户 A使用Firefox登录,但用户 B不能在同一台 PC 上使用IE登录

如果从服务器端询问,我在浏览器之间搜索的会话共享无法完成

4

3 回答 3

2

从理论上讲,您可以使用session_id()和数据库条目来执行此操作,尽管安全性会很棘手,因为恶意用户可能会尝试生成随机会话 ID 来模仿登录用户的会话。

会话信息存储在客户端浏览器中的 cookie 中,具有指定的 ID。通过存储该 ID 和数据的 JSON 字符串,无论何时更新,不同的用户都可以共享相同的数据。他们都必须不时轮询服务器以查看数据是否已更改。

但是到那时,您不再需要使用$_SESSION了,因此它几乎违背了您提出问题的目的。您可以使用常规变量获得相同的行为,这已经是一种安全改进。


简短的回答:不,这不是会议的重点。

于 2013-07-10T03:54:42.217 回答
1

您可以制作登录脚本,以便在登录时检查用户是否已经登录。如果登录,那么它将拒绝任何进一步的登录。

如上所述,PHP 可以将会话 ID 存储在数据库中。检查数据库是否存在,然后基于此允许或禁止。

于 2013-07-10T03:58:27.293 回答
0

您可以通过使用识别设备的签名算法来完成此任务(假设您与一般用户合作,他们不会尝试欺骗用户代理和其他技巧)。你的算法可以有你认为合适的变量。

例如 REMOTE_ADDR、USER_AGENT。其他特殊变量可以通过在客户端执行基于闪存的代码来获得。当每个请求进来时,您可以将其与经过身份验证的现有密钥进行比较,如果您获得一个新会话,其中除浏览器字符串之外的所有变量都匹配,您可以安全地假设它是使用不同浏览器的同一用户。

您必须使用 Flash 组件收集额外的变量才能使其工作。通过 $_SERVER 可用的变量是不够的。因为代理背后可能有用户,您不想将它们识别为误报。

于 2013-07-10T03:59:01.137 回答