Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 确保用户帐户一次只能从一台计算机登录所需的建议_Php_Logging - Fatal编程技术网

Php 确保用户帐户一次只能从一台计算机登录所需的建议

Php 确保用户帐户一次只能从一台计算机登录所需的建议,php,logging,Php,Logging,我有一个需要用户名和密码才能访问的网站,但我需要确保用户一次只能从一台计算机登录到该网站 此时,它被配置为当用户登录数据库中的值时更改为1,当用户注销时更改为0。如果其他人尝试从另一台计算机登录,且值为1,则会通知他们该用户帐户正在其他地方使用 除非原始用户不注销,否则这非常有效,如果他们只是关闭浏览器,则值保持为1,这意味着现在没有人可以登录到该帐户 我考虑过的事情 php会话超时-网站的性质意味着用户将在不做任何实际操作的情况下,让页面长时间打开以查看。如果在一小时内未检测到浏览器活动,系统

我有一个需要用户名和密码才能访问的网站,但我需要确保用户一次只能从一台计算机登录到该网站

此时,它被配置为当用户登录数据库中的值时更改为1,当用户注销时更改为0。如果其他人尝试从另一台计算机登录,且值为1,则会通知他们该用户帐户正在其他地方使用

除非原始用户不注销,否则这非常有效,如果他们只是关闭浏览器,则值保持为1,这意味着现在没有人可以登录到该帐户

我考虑过的事情

  • php会话超时-网站的性质意味着用户将在不做任何实际操作的情况下,让页面长时间打开以查看。如果在一小时内未检测到浏览器活动,系统将设置为自动注销用户。这意味着用户在关闭浏览器后的一小时内无法从另一台计算机登录

  • 让用户能够在另一台计算机上结束会话—当用户登录时,他们的ip地址存储在数据库中,并且每次他们做某事时,他们的ip地址都会与数据库中的ip地址进行比较。如果不匹配,用户将被发送到主页,并通知其他人已接管其帐户,他们已注销。这将不起作用,因为该网站将主要用于网络上的机器,经过大量搜索,我得出结论,我无法使用php或javascript识别网络上唯一的机器

  • chrome是我的大多数用户使用的浏览器,它不支持使用body onunload()使用ajax调用更改数据库中的值


  • 任何人都可以推荐一种唯一标识机器的方法(可能通过使用cookies),或者推荐一种他们已经使用或知道可用于完成此任务的策略吗?

    每次用户登录时,都给用户一个新的随机生成的令牌。此令牌将用于所有用户请求的身份验证。当用户登录时,他们的令牌将在数据库中设置并覆盖旧令牌

    以以下为例:

  • 用户登录到计算机A。获取令牌并能够使用 服务器
  • 然后用户登录到机器B上。获取一个令牌,来自机器a的令牌在数据库中被覆盖
  • 计算机A上的用户 发出请求,但令牌不再被识别-请求 现在只能从机器B开始工作

  • 可能的,或。查看数据库会话-如果用户登录,请为其撤消数据库中的任何现有会话,并检查每个页面视图的会话有效性。