2

我执行以下操作来设置我的会话,这是因为出现了回声。但是当我转到下一页或其他页面时,会话不存在吗?我究竟做错了什么?

$session_start();

if ($username==$dbusername&&$password==$dbpassword)
    {
        echo"<b>Login Successful</b><br><a href='systemadmin.html'><br>Click here to access the <strong>System Admin Page</strong></a>";
        $_session['username']=$dbusername;
        if($username == "admin")
        {
            $_session['admin'] = true;
        }

我正在尝试使以下内容与这些会话一起使用:

<?php
session_start();
if($_session['admin'] == true)
{
// do nothing
}else{
    header( 'Location: home.html' ) ;
}

?>

更新:

大写会话有效,但现在当我使用 logout.php 时会话不会破坏

<?php

session_start();

session_destroy();

header("location: home.html");

?>
4

4 回答 4

5

$_session应该是 => $_SESSION

http://php.net/manual/en/reserved.variables.session.php

第一个有效,因为您正在设置一个“正常”变量(可用于请求)。

更新

要销毁会话:

<?php
// Initialize the session.
// If you are using session_name("something"), don't forget it now!
session_start();

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

// If it's desired to kill the session, also delete the session cookie.
// Note: This will destroy the session, and not just the session data!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// Finally, destroy the session.
session_destroy();
?>

http://php.net/manual/en/function.session-destroy.php#example-4368

另外,您应该始终exit();在执行重定向后使用,以防止进一步执行脚本。

于 2012-04-29T15:22:44.950 回答
2

你必须使用 exit(); 在标头()之后;因为脚本并不总是在用户重定向到新页面后立即结束。

于 2012-04-29T15:39:11.233 回答
2

PHP 服务器/会话/全局变量区分大小写。对 PHP$_SESSION来说,与 . 的变量不同$_session,即使对你来说,它们似乎是。您必须使用$_SESSION, 而不是$_session按预期访问 PHP Session 变量。

于 2012-04-29T15:25:27.630 回答
0

超全局的名称是$_SESSION大写字母。尝试改变它,看看它是否有帮助。

于 2012-04-29T15:22:10.283 回答