检查服务器上是否存在带值的 php 变量


Check if php variable with value exists on the server

我的站点要求用户登录,之后用户的ID将存储在会话中。 数据库有一个名为"logged_in"的字段,登录时值为 1,注销时更改为 0。 问题是,如果用户只是关闭浏览器,则值保持为 1。

我知道我可以检查服务器上是否存在会话,但我可以检查是否存在具有特定值的会话吗? 我想文字代码将是

if(!isset($_SESSION['user_id'] == 41)){
   // do stuff because session with value 41 doesn't exist
}

不要使用数据库来跟踪用户的登录状态。看看$_SESSION数组。

会话将根据您在 php.ini 中设置的超时值超时。

有用的链接:

  • session_start:http://de2.php.net/manual/en/function.session-start.php
  • session_destroy:http://de2.php.net/manual/en/function.session-destroy.php
  • 会话超时:如何在 30 分钟后使 PHP 会话过期?

会话对于每个用户都是唯一的 - 因此即使同时处理 5000 万用户,也不会发生任何冲突。

想象一个$_SESSION是一个对某个用户唯一的数组。(实际上仅此而已,如果用户发送正确的会话cookie,服务器将注意提供正确的数组 - 这反过来又不是你(或用户(需要注意的 - 他的浏览器会做!


简而言之:通过比较 id,让您不必处理多个会话。如果正确启动,阵列$_SESSION将始终是与当前用户关联的数组。

您的服务器将始终返回一个 Session-Array ,访问$_SESSION - 与用户相关联的执行请求的那个。


创建一个简单的"脚本",如下所示:

<?php
SESSION_START();
if (!isset($_SESSION["start_time"])){
  echo "Session started at: ";
  $_SESSION["start_time"] = date("Y-m-d H:i:s");
}else{
  echo "Session already existing. Started at: ";
}
echo $_SESSION["start_time"];
?>

从 2 个不同的浏览器访问该页面。

  • 首次访问时,您将收到Session started at消息。
  • 第二次访问将使用已存储的 DateTime 传递session already existing消息,直到您调用 session_destroy() - 或会话超时。
  • 您可以刷新页面 10.000 次 - 只要会话有效并且您使用相同的浏览器(:P自动传输会话 cookie(,时间戳就不会再更改。
  • 您无需提供任何user_id即可完成此操作。您的服务器将(静默地(为您提供正确的$_SESSION -Array。只需编写您的网站,就好像它针对一个用户一样,同时将用户敏感值存储在$_SESSION -Array 而不是 $someOther -Array 中。

您要检查会话是否已设置,如果是,请检查它是否与值匹配:

<?php
if(!isset($_SESSION['user_id']) 
   || (isset($_SESSION['user_id']) && $_SESSION['user_id'] != 41)) {
   //session is not set, or value differs from 41
}
?>

如果你的数据库中确实需要有关登录状态的信息,我建议你存储上次登录的时间戳,也许是他们上次处于活动状态的时间,你可以推断他们被"注销"如果会话超时自上次活动时间以来已经过去了。