首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP会话不会保留数组变量

PHP会话不会保留数组变量
EN

Stack Overflow用户
提问于 2014-02-15 12:01:17
回答 2查看 849关注 0票数 2

我有一个带有登录表单的索引页面,一个名为 login content的验证页面。

索引相当简单:如果登录,则重定向到Content,否则将显示登录表单并将其发送到 login 页面

index.php:

代码语言:javascript
复制
 <?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 } ?>

然后进行Login验证:将POST vars与编码变量进行比较,如果一切正常,设置会话变量并重定向到content

login.php:

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
<?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 } ?>

该过程工作,直到内容页。我一直得到一个空白的会话数组,当我尝试索引时,它假装我从未登录过。我遗漏了什么?!

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

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

即使没有IF语句,运行一个print_r ($_SESSION);也会返回一个空数组。这意味着IF语句中没有问题,而是在它之前发生的事情。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-15 12:06:13

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

这将是会话变量不被保存的主要原因。

票数 1
EN

Stack Overflow用户

发布于 2014-02-15 12:13:24

代码语言:javascript
复制
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 } ?>
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21797255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档