我的网站要求用户登录,然后将用户的id存储在会话中。db有一个名为“logged_in”的字段,登录时值为1,注销时为0。问题是,如果用户刚刚关闭浏览器,则值将保持为1。
我知道可以检查服务器上是否存在会话,但是否存在具有特定值的会话?我想字面上的代码是
if(!isset($_SESSION['user_id'] == 41)){
// do stuff because session with value 41 doesn't exist
}发布于 2014-09-15 21:30:26
您希望检查是否设置了会话,如果设置了会话,则检查它是否与值匹配:
<?php
if(!isset($_SESSION['user_id'])
|| (isset($_SESSION['user_id']) && $_SESSION['user_id'] != 41)) {
//session is not set, or value differs from 41
}
?>发布于 2014-09-15 21:31:18
不要使用数据库跟踪用户登录状态。看看$_SESSION-Array。
会话将根据php.ini中的超时值设置超时。
有用的链接:
会话对每个用户都是唯一的,因此您将不会有任何冲突,即使同时处理5000万用户。
假设$_SESSION是特定用户特有的数组。(实际上,如果用户发送正确的会话-cookie(这又不是您(或用户)需要处理的东西),服务器将不关心提供正确的数组--他的浏览器会做什么!)
简而言之:通过比较In来释放您的头脑来处理多个会话。如果正确启动,数组$_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"];
?>从两个不同的浏览器访问页面。
Session started at消息。session already existing消息、,直到您调用session_destroy()的-或者会话超时。user_id来完成这项工作。您的服务器将(静默地)为您提供正确的$_SESSION-Array。只需编写您的网站,就好像它会针对一个用户一样,同时将用户敏感的值存储在$_SESSION-Array而不是$someOther-Array中。发布于 2014-09-15 21:53:10
如果您确实需要在数据库中提供有关登录状态的信息,我建议您存储上一次登录的时间戳,或者是上次它们活动时的时间戳,如果会话超时自上次活动时间以来已过,则可以推断它们是“注销”。
https://stackoverflow.com/questions/25857156
复制相似问题