【问题标题】:PHP unset and desroyed session starts itselfPHP 未设置和销毁的会话自行启动
【发布时间】:2013-04-17 14:23:21
【问题描述】:

我的 php 代码有一点问题...你能帮帮我吗? 问题是,当我在我的 logout.php 中取消设置和销毁会话时,它在我第一次加载我的其他一些页面时起作用.. 但是当我立即刷新时,会话再次启动,我真的不明白?因为我有我的页面来查找具有特定名称的会话。这是我的代码:

Login.php:

<?php session_start();
//Get username and password
$email = $_POST['email'];
$password = $_POST['password'];

//Sorting special characters away, with exception of "-" and "."
stripslashes($email);
$email = preg_replace('/[^A-Za-z0-9@\.\-]/','', $email);


//Getting the password from the database
$link = mysqli_connect("****", "****", "****", "****");
if (mysqli_connect_errno($connect)) 
{
    echo "Connection Failed!";
    mysqli_close($connect);
}
$sql = "SELECT * FROM admins WHERE email = '". $email . "'";
if ($result = mysqli_query($link, $sql))
{
    while ($row = mysqli_fetch_row($result))
    {
        $db_password = $row[2];
    }
    mysqli_free_result($result);

}
mysqli_close($connect);

//Compare DB-password to entered password
if ($db_password == $password)
{
    $_SESSION['admin'] = $email;
    header("Location: ../index.php");
    exit();
}
header("Location: index.php");
exit();
?>

Logout.php:

if(!isset($_SESSION['admin']))
{
    header("Location: ../index.php");
    exit();
}
else
{
    session_unset();
    session_destroy();
    echo '<h1>You have been succesfully logged out!</h>';
    exit();
}

Index.php:

if (isset($_SESSION['admin']))
{
    echo '<div id="admin"><br>
    <h3>'.$_SESSION["admin"].'</h3>
    <a href="http://www.mysite.com/admin"><span>Admin panel</span></a><br>
    <a href="http://www.mysite.com/admin/logout.php"><span>Log out</span></a>
    </div>';
}

是的,我的每一页都有session_start()

正如您在 index.php 中看到的,如果设置了 $_SESSION['admin'],我希望编写一些代码。当我在 logout.php 中销毁会话并转到 index.php 时,它会在我第一次加载页面时工作。但我刷新,代码重新出现,这意味着会话必须再次设置,不知何故!但我不知道为什么?请帮忙!

编辑:我现在已经把 login.php 的全部代码放好了。其他 2 页的其余部分是纯 HTML。我发布的是我所有的PHP代码!

【问题讨论】:

  • 取消设置会话后,为什么要调用exit()?为什么不让页面加载完成?设置标题位置后调用exit很好,但是为什么要在页面加载时提前退出?
  • 注销并刷新后$_SESSION['admin']的值是多少?

标签: php html session login logout


【解决方案1】:

这可能是因为 PHPSESSID cookie。只需从浏览器中删除 PHPSESSID cookie 即可尝试

if(!isset($_SESSION['admin']))
{
    header("Location: ../index.php");
    exit();
}
else
{
    session_unset();
    session_destroy();
    setcookie('phpsessid','value',time()-1);  
    echo '<h1>You have been succesfully logged out!</h>';
    exit();
}

【讨论】:

  • 谢谢你,普拉莫德!添加setcookie("PHPSESSID","",time()-3600,"/"); 解决了问题! :D
【解决方案2】:

刷新后,您的以下条件满足:

if ($db_password == $password)

连接建立,会话被创建,你从 login.php 被重定向到 index.php。

改变这个条件,你的脚本就可以工作了

【讨论】:

    猜你喜欢
    • 2013-10-18
    • 2011-12-12
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 2012-05-25
    • 2011-11-06
    相关资源
    最近更新 更多