我有一个带有类别"abc"的侧边栏。单击弹出窗口时,div 加载要求用户登录或注册。用户登录后,它会加载页面"xyz.php"。为了防止直接访问"xyz.php",我正在post
上创建一个会话变量,如果会话变量存在,请检查"xyz.php":
<?php
session_start();
if (!isset($_SESSION['logged_in']))
header("Location: index.php");
?>
这工作得很好,我能够阻止直接访问上述链接。但是,一旦用户登录,就可以直接访问该页面。为了防止这种情况,我通过以下方式释放会话变量:
<?php
session_start();
session_unset('logged_in');
?>
但是,我在index
文件中调用它,并且只有当用户访问home page
会话变量才会被取消设置。用户登录并加载页面后,如何在网站上取消设置会话变量?只有在用户再次输入登录凭据后,页面才应再次加载。没有logout
机制,也是不希望的。
根据上面的评论,我想我会详细说明一下,这不适合评论,所以你去吧。
通常的做法是通过在会话变量中设置超时来终止由于不活动而终止会话。
假设您想在 30 分钟不活动后终止会话,无论是因为用户 30 分钟没有在您的网站上执行任何操作,还是他们完全离开了它。
您可以通过在会话中创建一个变量(在本例中,我们将其称为最后一个操作)并在其中存储最后一个用户操作的时间戳来管理它。每次页面刷新和更改时更新此项,并检查自上次操作以来的时间是否大于超时阈值。如果是这样,请终止会话。
创建一个名为"updateSession.php"的文件:
<?php
session_start();
if((time() - $_SESSION["lastAction"]) > 1800) //1800 == 30 minutes
{
session_destroy();
header("Location:/timeout");
return;
}
$_SESSION["lastAction"] = time();
?>
然后只需在每个页面中包含此文件:
include "{$_SERVER["DOCUMENT_ROOT"]}/path/to/updateSession.php";
您可以使用此代码您必须获取用户 ID,然后检查条件
<?php
session_start();
if (!isset($_SESSION['logged_in'] && $_SESSION['user_id'] !== User_id ))
header("Location: index.php");
?>