首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检查服务器上是否存在带有值的php变量

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

Stack Overflow用户
提问于 2014-09-15 21:26:49
回答 3查看 463关注 0票数 0

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

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

代码语言:javascript
复制
if(!isset($_SESSION['user_id'] == 41)){
   // do stuff because session with value 41 doesn't exist
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-15 21:30:26

您希望检查是否设置了会话,如果设置了会话,则检查它是否与值匹配:

代码语言:javascript
复制
<?php

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

?>
票数 0
EN

Stack Overflow用户

发布于 2014-09-15 21:31:18

不要使用数据库跟踪用户登录状态。看看$_SESSION-Array。

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

有用的链接:

会话对每个用户都是唯一的,因此您将不会有任何冲突,即使同时处理5000万用户。

假设$_SESSION是特定用户特有的数组。(实际上,如果用户发送正确的会话-cookie(这又不是您(或用户)需要处理的东西),服务器将不关心提供正确的数组--他的浏览器会做什么!)

简而言之:通过比较In来释放您的头脑来处理多个会话。如果正确启动,数组$_SESSION将始终是与当前用户关联的数组。

在访问与用户关联的执行请求的-- Session-Array时,您的服务器总是会准确地返回$_SESSION

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

代码语言:javascript
复制
<?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"];
?>

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

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

Stack Overflow用户

发布于 2014-09-15 21:53:10

如果您确实需要在数据库中提供有关登录状态的信息,我建议您存储上一次登录的时间戳,或者是上次它们活动时的时间戳,如果会话超时自上次活动时间以来已过,则可以推断它们是“注销”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25857156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档