Php 正在销毁用户登录的会话/NULL$\u会话剩余

Php 正在销毁用户登录的会话/NULL$\u会话剩余,php,session,login,Php,Session,Login,我正在尝试创建一个用户登录系统,用于我正在构建的网站。我有登录脚本和注册脚本,但是我在注销和销毁会话时遇到了问题 这是我的索引代码。它在config中获取数据库信息(还没有做任何处理),然后运行checklogin以确保用户实际登录。它有一个logout按钮,可以路由到logout.php <?php include_once("config.php"); include_once("check-login.php"); session_start();

我正在尝试创建一个用户登录系统,用于我正在构建的网站。我有登录脚本和注册脚本,但是我在注销和销毁会话时遇到了问题

这是我的索引代码。它在config中获取数据库信息(还没有做任何处理),然后运行checklogin以确保用户实际登录。它有一个logout按钮,可以路由到logout.php

<?php 
    include_once("config.php");
    include_once("check-login.php");
    session_start();
    $username = $_SESSION["username"];
?>

<html>
<body>
    <h1>
        Hello <? echo $username ?>! We're still building, but feel free to... wait?
    </h1>
    <form action="logout.php">
        <input class="logoutbutton" type="submit" value="Logout" />
    </form>
</body>
</html>
最后是我的logout.php,它(理论上)应该会破坏会话,然后返回index.php。当返回index.php时,index.php将使用
include_once(“check login.php”)重新路由到login.php

因此,在功能方面,login.php应该永远不可见,除非您有一个有效的会话,当它出现时,它应该说“Welcome$username!”。但是,如果您点击索引上的注销按钮,它仍将保持会话打开,但它将为空


关于为什么注销似乎没有完全注销用户,或者为什么注销用户但保留空$\u会话,有什么建议吗?

首先,查看index.php文件。在该文件中,更改以下代码:

include_once("config.php");
include_once("check-login.php");
session_start(); // move the session_start function and place at the top of the script
$username = $_SESSION["username"];
更改它,使其变成如下所示:

session_start();
include_once("config.php");
include_once("check-login.php");
$username = $_SESSION["username"];
出现此问题是因为在文件check-login.php中没有声明函数session_start()


我已经测试了这个问题。而且它有效

首先,看看index.php文件。在该文件中,更改以下代码:

include_once("config.php");
include_once("check-login.php");
session_start(); // move the session_start function and place at the top of the script
$username = $_SESSION["username"];
更改它,使其变成如下所示:

session_start();
include_once("config.php");
include_once("check-login.php");
$username = $_SESSION["username"];
出现此问题是因为在文件check-login.php中没有声明函数session_start()


我已经测试了这个问题。而且它有效

要删除会话,请使用

unset($_SESSION['SESSION_VAR'] );
session_destroy(); //closes the session and prevents session riding
有关更多信息,我建议您尽快结束您的课程,以防止出现这种情况

也不要取消设置整个会话全局数组

//don't do this
unset($_SESSION);

要删除会话,请使用

unset($_SESSION['SESSION_VAR'] );
session_destroy(); //closes the session and prevents session riding
有关更多信息,我建议您尽快结束您的课程,以防止出现这种情况

也不要取消设置整个会话全局数组

//don't do this
unset($_SESSION);

首先,您应该检查会话是否在索引中设置了用户名。还可以尝试取消设置($_SESSION['SESSION_var']);我听说使用
unset($_SESSION['username')
适用于旧版本的PHP,不应再使用。不管怎样,我都要试一试。至于检查会话是否已设置,应该在包含的check-login.php中处理,对吗?我总是练习从不信任任何东西lol。因此,一个简单的if条件加上一个出口不会有什么坏处。关于unset,我所读到的唯一一件事就是不要完全取消全局数组的设置。像$\u SESSION或$\u COOKIE,我不确定它会有多大冲突,但我总是做需要取消设置的会话。嗯,我明白了。好吧,我试试看,让你知道它是怎么回事!听起来不错,无论如何尝试都没有坏处。如果这不起作用,我们会解决的。首先,你应该检查会话是否在你的索引中设置了用户名。还可以尝试取消设置($_SESSION['SESSION_var']);我听说使用
unset($_SESSION['username')
适用于旧版本的PHP,不应再使用。不管怎样,我都要试一试。至于检查会话是否已设置,应该在包含的check-login.php中处理,对吗?我总是练习从不信任任何东西lol。因此,一个简单的if条件加上一个出口不会有什么坏处。关于unset,我所读到的唯一一件事就是不要完全取消全局数组的设置。像$\u SESSION或$\u COOKIE,我不确定它会有多大冲突,但我总是做需要取消设置的会话。嗯,我明白了。好吧,我试试看,让你知道它是怎么回事!听起来不错,无论如何尝试都没有坏处。如果这不起作用,我们会从那里找到答案。
foreach($k in\array\u keys($u SESSION)){\unset($u SESSION[$k])}
:)是的,我不打算发布这个,只是因为有时候这不是需要的情况。谢谢分享。
foreach($k in\array\u keys($\u SESSION)){\unset($\u SESSION[$k])}
:)是的,我不打算发表这篇文章,只是因为有时候这不是必需的。谢谢分享。