php。尝试访问 $_SESSION 变量会导致索引错误

Posted

技术标签:

【中文标题】php。尝试访问 $_SESSION 变量会导致索引错误【英文标题】:php. Trying to access $_SESSION variables gives index error 【发布时间】:2017-05-05 23:30:15 【问题描述】:

尝试访问 $_SESSION['key'] 时出现索引错误。

我需要检查 $_SESSION['loggedin'] 是否设置为 true 以显示登录/注销按钮。

//GENERAL IDEA 
if( $_SESSION['loggedin'] == true )
    //log out 
else
    //log in

但它总是执行 else 并显示登录按钮。

过了一会儿,我尝试回显 $_SESSIONS['loggedin'] 值,但出现索引错误。检查 $_SESSION 上的 isset() 会返回 false。

所以我认为问题在于我的 $_SESSION['loggedin'] 没有像我想的那样工作。

我有:

session_start() 在我的文件顶部。

.php 我所有文件的扩展名。


如果成功登录,

login.php 会创建 $_SESSION['loggedin']。(我知道我已成功登录,因为我被重定向了。)

if( $_POST['username'] == "myUSER" && $_POST['password'] == "myPASSWORD" )
    $_SESSION['loggedin'] == true;
    header( "location: ../main/home.php" );
    exit;
else 
    $bad_login == true;


Authentication.php loggedin() 类函数检查 $_SESSION['loggedin'] isset 和 true 是否返回 true

public static function loggedin()
    return ( isset( $_SESSION['loggedin'] ) && $_SESSION['loggedin'] == true );


_template.php 包含在页脚部分显示的按钮。 (我在这里复制了我的整个模板文件,因为我想指出我的 start_session() 位于我的 home.php 文件的顶部,但我认为这没有什么不同。或者如果整个文件被复制,也许更容易注意到我的错。)

<?php
$page_name = basename( $_SERVER['PHP_SELF']);
$page_name_parts = explode( '.', $page_name );
?>

<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>Title</title>
<meta name="viewport" content="width=device-width">
</head>

<body>
    <div class="container-fluid">

        <header>
            <h1 id="top">Heading</h1>
        </header>

        <?php
            //Flash::show_flash();
            require( $page_name_parts[0] . ".view.php" );
        ?>

        <footer>
            <!-- Login button -->
            <?php require_once( "../lib/Authentication.php" ); ?>
            <?php if( Authentication::loggedin() ): ?>
                <a href=" ../authentication/logout.php"><button class="btn1">Logout</button></a>
            <?php else : ?>
                <a href=" ../authentication/login.php"><button class="btn1">Login</button></a>
            <?php endif ?>

            <!-- Scroll TOP -->
            <a href="#top"><span></span>Top</a>
        </footer>
    </div>
</body>

</html>

【问题讨论】:

未设置$_SESSION['loggedin'] 时会发生这种情况。你应该做的是检查索引是否 isset if(isset($_SESSION['loggedin']) &amp;&amp; $_SESSION['loggedin']) //you are logged in else //not logged in 【参考方案1】:

你不设置$_SESSION['loggedin'],你测试它是否为真。将== 更改为=

【讨论】:

if($_SESSION['loggedin'] = true) 永远为真。【参考方案2】:

我的文件顶部确实有 session_start()。

但我在您发布的任何代码中都看不到它。

你的方法也有缺陷。

是的,您的登录页面可能正在设置值并保存它,但随后没有被读取。您应该首先查看您的错误报告/日志记录,以确保您没有收到headers already sent 警告。

然后检查您的 HTTP 请求和响应标头,以确保您的浏览器发送回登录页面中使用的相同会话 cookie 值。您可能遇到 cookie 路径问题。

这涵盖了 99% 的情况 - 但如果您正确复制了代码,那么您的问题就在这里:

if( $_POST['username'] == "myUSER" && $_POST['password'] == "myPASSWORD" )
    $_SESSION['loggedin'] == true;

您没有在登录时设置值 - '==' 是比较而不是赋值。

【讨论】:

【参考方案3】:
session_start();

http://www.w3schools.com/php/php_sessions.asp 这是一个关于它如何工作的链接

【讨论】:

以上是关于php。尝试访问 $_SESSION 变量会导致索引错误的主要内容,如果未能解决你的问题,请参考以下文章

PHP 登录和 $_SESSION

PHP $_SESSION 变量不持有

★★★★★提高PHP代码质量的36个技巧

从不同端口上的 AJAX 访问时,$_SESSION 变量为空 [重复]

PHP 在类函数中使用 $_SESSION 变量作为默认值

PHP session_set_cookie_params 中断 php session_start() 函数和 $_SESSION 变量