1

当用户登录到我的站点时,我会获取他们所有的用户信息并将其存储在一个名为user_info. 这样我就不必进行连续的数据库查找来获取几乎每个页面上都需要的有关用户的常见信息。当 var 转储时,用户信息会话如下所示:

array(17) {
  ["user_id"]=>
  string(7) "1165771"
  ["username"]=>
  string(2) "Jake"
  ["who"]=>
  string(1) "1"
  ["seeking"]=>
  string(1) "2"
  ["orientation"]=>
  string(1) "1"
  ["dob"]=>
  string(10) "1985-07-08"
  ["zip"]=>
  string(5) "25140"
  ["email"]=>
  string(17) "foo@bar.com"
  ["account_status"]=>
  string(1) "1"
  ["role"]=>
  string(1) "1"
  ["paused"]=>
  string(1) "0"
  ["latitude"]=>
  string(11) "37.89955100"
  ["longitude"]=>
  string(12) "-81.52641100"
  ["region"]=>
  string(2) "WV"
  ["city"]=>
  string(5) "NAOMA"
  ["avatar"]=>
  string(21) "1165771_50c6816a8fad1"
  ["email_setting"]=>
  string(1) "1"
}

现在有一个“帐户设置”页面,用户可以在其中更新他们的一些信息。因此,如果他们更改了他们的用户名,例如我这样做是为了更新他们的会话,以便它现在包含新值:

$_SESSION['user_info']['username'] = 'NEW VALUE';

现在问题来了。如果我决定在管理面板中审核时禁止用户,那么他们的帐户状态将在数据库中从 1(表示活跃)更新为 2(表示被禁止)。但是,要使此更改反映在他们的 user_info 会话中,我不能这样做:

$_SESSION['user_info']['account_status'] = 2;

因为它只会在我的计算机上更新我的用户信息,而不是在他/她的计算机上更新用户的会话。他们将能够继续使用该网站,即使他们在技术上被禁止,直到他们注销并尝试重新登录。

然后他们将被阻止进入,因为为了让登录 SQL 查询返回 true,除了正确获取凭据之外,用户还必须具有 1 的帐户状态。

问题

  1. 当我更改个人用户的帐户时,如何更新他们的会话。

  2. 如何从我的服务器中完全删除用户的会话,以便他们立即注销。

4

4 回答 4

0

如果您需要此更改立即生效,那么据我所知,您必须检查每个页面上的用户状态,如果用户被禁止,请采取适当的措施。

这个答案建议更改文件作为替代方案,但即使作者也不建议这样做。

于 2012-12-13T02:29:11.163 回答
0
How can I update the session of an individual user when I make a change to their account.

就我个人而言,我只是切换到数据库会话 - 在代码开头轮询数据库一次,以将所有用户数据放入一个变量中。

这样,如果在页面更改期间管理员权限发生更改,用户会立即拥有新的访问级别。

How I can delete a user's session completely from my server so they are immediately logged out.

然后,您还可以从数据库中“删除”一个会话 - 强制用户注销。

于 2012-12-13T02:31:26.317 回答
0

只需在每次页面加载时添加对会话的检查。例如,有一个数据库表,您可以在其中临时编写活动会话。如果用户重新加载并且表中没有这样的条目,他必须再次登录并重写会话。如果他注销或者你有 3 把他踢出去,你只需删除或修改条目。这也可以成为一个经典的工具——目前无论用户在sit3 ecc...

于 2012-12-13T02:32:22.897 回答
0

另一种解决方案(而不是直接断开连接)是向会话添加时间戳并每 xx 分钟刷新一次(如果会话数据早于 xx 分钟,则执行数据库查询)。

这样,被阻止的用户不会立即被踢出,但您可以控制时间并减少数据库查询的数量(每 xx 分钟而不是每个请求)。

However, I would first check if the queries to the user database really have that big of an impact.

于 2012-12-13T02:35:36.750 回答