Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 - Fatal编程技术网

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

检查服务器上是否存在具有值的php变量,php,Php,“我的网站”要求用户登录,然后将用户id存储在会话中。db有一个名为“logged_in”的字段,当他们登录时,该字段的值为1,当他们注销时,该字段更改为0。问题是,如果用户刚刚关闭浏览器,该值将保持为1 我知道我可以检查服务器上是否存在会话,但我可以检查是否存在具有特定值的会话吗?我想文字代码应该是 if(!isset($_SESSION['user_id'] == 41)){ // do stuff because session with value 41 doesn't exist

“我的网站”要求用户登录,然后将用户id存储在会话中。db有一个名为“logged_in”的字段,当他们登录时,该字段的值为1,当他们注销时,该字段更改为0。问题是,如果用户刚刚关闭浏览器,该值将保持为1

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

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

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

<?php

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

?>

不要使用数据库跟踪用户的登录状态。查看
$\u会话
-数组

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

有用链接:

  • 会议开始:
  • 会话(u):
  • 会话超时:
每个用户的会话都是唯一的,因此即使同时处理5000万用户,也不会有任何冲突

假设一个
$\u会话
是一个特定用户所独有的数组。(事实上,仅此而已,如果用户发送正确的会话cookie,服务器将不会注意提供正确的数组,而您(或用户)不需要注意的是,他的浏览器也可以!)


简言之:通过比较ID,让您的头脑不再需要处理多个会话。如果启动正确,数组
$\u会话
将始终与当前用户关联

当访问执行请求的与用户关联的会话时,您的服务器将始终准确返回一个会话数组


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

<?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"];
?>

从两个不同的浏览器访问页面

  • 第一次访问时,您将收到从开始的
    会话消息
  • 第二次访问将传递带有已存储日期时间的
    会话已存在的消息,直到调用
    会话销毁()
    -或会话超时
  • 您可以刷新页面10.000次-只要会话有效并且您使用相同的浏览器(自动传输会话cookie:P),时间戳将不再更改
  • 您无需提供任何
    用户id
    即可实现此功能。您的服务器将(静默)为您提供正确的
    $\u会话
    -阵列。只需编写您的网站,就好像它将以一个用户为目标,同时将用户敏感值存储在
    $会话
    -数组中,而不是
    $其他人
    -数组中

如果您确实需要数据库中有关登录状态的信息,我建议您存储上次登录的时间戳,可能还有上次活动的时间戳,如果自上次活动时间起会话超时已过,您可以推断它们已“注销”

会话很可能会被设置,因为可能有大约800个用户。我只是想提供他出错的逻辑。谢谢,我可以看到我需要重新思考我使用会话的方式,感谢有用的链接