PHP。尝试访问$ _SESSION变量会产生索引错误

时间:2016-12-20 17:00:55

标签: php html session

尝试访问$ _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 包含页脚部分中的按钮显示。 (我在这里复制了我的整个模板文件bc我想指出我的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>

3 个答案:

答案 0 :(得分:0)

你没有设置$_SESSION['loggedin'],你测试它是否属实。将==更改为=

答案 1 :(得分:-1)

  

我的文件顶部有session_start()。

但是我无法在您发布的任何代码中看到它。

你的方法也有缺陷。

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

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

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

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

您没有在登录时设置值 - &#39; ==&#39;是比较而非作业。

答案 2 :(得分:-1)

session_start();

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