Javascript 在何处调用会话\u unset(用户)

Javascript 在何处调用会话\u unset(用户),javascript,php,variables,session,Javascript,Php,Variables,Session,我有一个分类为“abc”的侧栏。单击一个弹出窗口,div加载请求用户登录或注册。用户登录后,将加载页面“xyz.php”。为了防止直接访问“xyz.php”,我正在post上创建一个会话变量,并在“xyz.php”中检查会话变量是否存在: <?php session_start(); if (!isset($_SESSION['logged_in'])) header("Location: index.php"); ?> 这工作非常好,我能够阻止直接访问上述链接。但是,

我有一个分类为“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'); 
?>

但是,我在
索引
文件中调用它,并且只有当用户访问
主页
时,会话变量才会被取消设置。一旦用户登录并加载页面,如何在整个网站上取消设置会话变量?只有在用户再次输入登录凭据后,才能再次加载页面。没有退出机制,不需要退出。

您可以使用此代码 您必须获取用户id,然后检查

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

根据上面的评论,我想我会详细说明一下,这不适合评论,所以给你

通常的做法是通过在会话变量中设置超时来终止由于不活动而导致的会话

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

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

创建一个名为“updateSession.php”的文件:
出于好奇,当用户已经登录时,为什么要阻止直接访问?这通常是非常正常的行为。您询问的是自动会话清除吗?@David用户可能已关闭网站窗口,在稍后的时间/日期重新访问,会话仍然可用。用户应使用登录选项查看特定的page@Harshana是,通过登录选项加载页面后清除会话通常通过在会话中配置超时来避免这种情况。我在读取会话变量和通过登录授予对页面的访问权限方面没有问题。我想在页面加载后清除session变量,我想这就是解决方案@Sarah
<?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";