我有一个带有类别" 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
机制,不需要。
答案 0 :(得分:2)
根据上面的评论,我想我会详细说明一下,这不适合评论,所以你走了。
通常的做法是通过在会话变量中设置超时来终止会话。
让我们假设您想在30分钟不活动后终止会话,无论是因为用户在您的网站上没有做任何事情30分钟,或者他们完全离开了它。
您可以通过在会话中创建变量来管理此操作(对于此示例,我们将其称为最后一个操作)并将最后一个用户操作的时间戳存储在其中。在每个页面上更新此更新并更改并检查自上次操作以来的时间是否大于超时阈值。如果是这样,请终止会话。
<?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";
答案 1 :(得分:0)
您可以使用此代码 你必须得到用户ID然后检查条件
<?php
session_start();
if (!isset($_SESSION['logged_in'] && $_SESSION['user_id'] !== User_id ))
header("Location: index.php");
?>