在哪里调用session_unset(user)

8 浏览
0 Comments

在哪里调用session_unset(user)

我有一个带有分类“abc”的侧边栏。点击后,弹出一个div,要求用户登录或注册。一旦用户登录,页面“xyz.php”加载。为了防止直接访问“xyz.php”,我在post中创建一个会话变量,并在“xyz.php”中检查该会话变量是否存在:


这个方法运行得很好,我能够阻止直接访问上述链接。然而,一旦用户登录,页面就可以直接访问。为了防止这种情况,我通过以下方法释放会话变量:


然而,我是在index文件中调用它,只有当用户访问首页时,会话变量才会被取消。一旦用户登录并加载页面,我如何在整个网站上取消会话变量?只有用户再次输入登录凭据后,页面才会重新加载。目前没有注销机制,并且也不需要。

0
0 Comments

根据上面的评论,我认为我应该再详细解释一下,而且这不适合在评论中进行,所以这里给你一个解决方法。

根据惯例,通过设置会话变量的超时时间来终止会话是很常见的做法。

假设您希望在30分钟的不活动后终止会话,无论是因为用户在您的网站上30分钟内没有做任何操作,还是完全离开了网站。

您可以通过在会话中创建一个变量(我们在这个例子中称之为last action),并将最后一次用户操作的时间戳存储在其中来管理这个过程。在每次页面刷新和更改时更新该变量,并检查自上次操作以来的时间是否超过了超时阈值。如果是,就终止会话。

创建一个名为 "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";

我认为这是解决方案。

0
0 Comments

问题出现的原因是在页面加载后,希望清除session变量,但无法实现。

解决方法是在需要清除session变量的地方调用session_unset(user)函数。

文章如下:

在进行网页登录验证时,我们经常会使用session来保存用户登录状态。下面是一个示例代码:

    session_start();
    if (!isset($_SESSION['logged_in'] && $_SESSION['user_id'] !== User_id ))
        header("Location: index.php");

这段代码的功能是判断用户是否已经登录,如果没有登录则将页面重定向到登录页面。在这个代码中,我们可以看到使用了$_SESSION['logged_in']和$_SESSION['user_id']两个session变量来判断用户是否登录。

然而,上述代码中存在一个问题,即在页面加载后无法清除session变量。为了解决这个问题,我们可以在需要清除session变量的地方调用session_unset(user)函数。

    session_unset(user);

通过调用session_unset(user)函数,我们可以清除名为'user'的session变量。这样,在页面加载后,我们就可以实现清除session变量的需求了。

希望本文对你理解和解决这个问题有所帮助。

0