PHP Session不会保留数组变量

时间:2014-02-15 12:01:18

标签: php arrays session session-variables

我有一个索引页面,其中包含登录表单,一个名为登录内容的验证页面。

索引非常简单:如果已登录,则会重定向到内容,否则会显示登录表单并将POST发送到登录页面

的index.php:

 <?php    
    session_start();
    if(isset($_SESSION['usr']) && isset($_SESSION['pswd'])){
        header('Location: content.php');
    } else {
?>    
        <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.0 Transitional//EN">
        <html>
            <head>
                <title> PHP Login </title>
            </head>
            <body>
                <center>
                    <form method="POST" action="login.php">
                        <table>
                            <tr>
                                <td>Username:</td>
                                <td><input type="text" name="usr"></td>
                            </tr>
                            <tr>
                                <td>Password:</td>
                                <td><input type="password" name="pswd"></td>
                            </tr>
                            <tr>
                                <td><input type="submit" name="login" value="Login"></td>
                                <td><input type="reset" name="reset" value="Reset"></td>
                            </tr>
                        </table>
                    </form>
                </center>
            </body>
        </html>
<?php } ?>

然后我们有登录验证:将POST变量与编码变量进行比较,如果一切正常,请设置会话变量并重定向到内容

的login.php:

<?php
session_start();    
if($_POST['usr']=='user' && $_POST['pswd']=='password'){
    $_SESSION['usr'] = 'user';
    $_SESSION['pswd'] = 'password';
    header('Location: content.php');
} else {
    echo "post: ";
    print_r ($_POST);
    //header('Location: index.php');
}
?>

然后我们有内容页面,检查会话是否设置并显示内容,否则PRINT_R

content.php:

<?php
session_start();
if(!isset($_SESSION['usr']) || !isset($_SESSION['pswd'])){
    // header('Location: index.php');
    echo "session: ";
    print_r ($_SESSION);
} else {
    include 'logoff.html';
?>
    You are logged in!!!
<?php } ?>

此过程适用于“内容”页面。我一直得到一个空白的SESSION数组,当我尝试去索引时,它假装我从未登录过。我错过了什么?!

编辑:在上面的代码中,content.php正在尝试检查会话是否已设置。如果未设置,它将显示一个空白数组(出于调试目的,但通常我希望它返回索引,因为用户未正确连接),

如果设置,它将回显“您已登录”。它还包括一个名为“logoff.html”的页面,因为该页面有一个用于销毁会话的按钮。

即使没有IF语句,只需运行print_r ($_SESSION);即可返回空白数组。这意味着IF语句中没有问题,但在它之前发生了一些问题。

解决方案:之前我不知道这一点,但是一些托管网站需要一些PHP设置才能存储PHP会话。我去了托管服务的知识库并搜索了“会话”,并找到了如何设置 php.ini 文件以将会话保存在正确路径中的解释。

2 个答案:

答案 0 :(得分:1)

确保正确配置会话。例如,会话保存处理程序是否设置正确?如果使用文件,是否有权访问指定的文件夹?如果是memcache,那是否设置正确?

这是会话变量无法保存的主要原因。

答案 1 :(得分:-3)

change this 

    <?php
    session_start();
    if(!isset($_SESSION['usr']) || !isset($_SESSION['pswd'])){
     // header('Location: index.php');
     echo "session: ";
     print_r ($_SESSION);
    } else {
     include 'logoff.html';
    ?>
    You are logged in!!!


    <?php } ?>




  i think in your code when session not set then it will print so change it with



    <?php
    session_start();
    if(isset($_SESSION['usr']) && isset($_SESSION['pswd']))
    {
      // session is set
     // header('Location: index.php');
     echo "session: ";
     print_r ($_SESSION);
    }
    else 
    {
       /// session is not set
     include 'logoff.html';
    ?>
    You are logged in!!!


    <?php } ?>