0

我已经制作了一个登录和注册系统,可以完美运行,我对此感到非常自豪,但我似乎无法让注销功能正常工作。

我的登录系统基本上获取数据库并扫描它以查找同时指定了用户名和密码的行,如果是,则它使 $_SESSION['loggedin']=1; 如果失败,则使其等于 0。

用户完成后,他/她单击重定向到 logout.php 的链接,这就是问题开始的地方。我已经把 session_start(); 在每个页面的开头,但 session_destroy、session_unset 和两者的组合似乎无法终止会话。

所以我想知道,有没有办法在加载 logout.php 时将 $_SESSION['loggedin] 设置为 0,然后重定向回 index.php(我的主页)?这意味着它不会终止会话,但它会有效地将用户注销。任何帮助表示赞赏。

4

4 回答 4

3

// 关闭会话的四个步骤 // (即注销)

    // 1. Find the session
    session_start();

    // 2. Unset all the session variables
    $_SESSION = array();

    // 3. Destroy the session cookie
    if(isset($_COOKIE[session_name()])) {
        setcookie(session_name(), '', time()-42000, '/');
    }

    // 4. Destroy the session
    session_destroy();
于 2013-08-03T15:57:21.690 回答
0

我建议你有 3 个文件 1) login.php

session_start();
/*if user $_POST username and password is correct then*/
$_SESSION['loggedin'] = 1;

?>

2)注销.php

<?php

session_start();
unset($_SESSION['loggedin']);
$_SESSION['loggedin'] = 0;

?>

3)checkLogin.php

<?php

session_start();
if ( isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == 0 )
{
echo "<script type='text/javascript'>alert('You need to login !')</script>";
echo '<meta http-equiv="Refresh" content="0;URL=index.php" />';
flush();
exit();
}
?>

如果你想控制一些在访问前需要登录的页面,则包含 3 个文件,你只需包含(checkLogin.php);

例如 index.php 不需要登录然后不包括(checkLogin.php);
但是 memberProfile.php 需要在 include(checkLogin.php) 之前登录;

于 2013-08-03T19:52:07.853 回答
0
// logout.php
session_start();
if(isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == 1) {
    $_SESSION['loggedin'] = 0;
    header('Location: index.php');
}

它将用户重定向到index.php,如果$_SESSION['loggedin']等于1,则设置$_SESSION['loggedin']0

于 2013-08-03T19:02:59.973 回答
0

if session_destroy doesn't work, use instead:

unset($_SESSION['put your session in here']);

于 2013-08-03T15:41:14.500 回答