使用PHP传递会话变量时遇到问题

时间:2016-10-15 22:46:45

标签: php

我试图通过尝试此代码来了解会话变量。出于测试的目的,我创建了3个页面并尝试传递会话变量。我注意到,第3页中没有填充会话变量。我已经搜索过问题所在,我还没弄明白。

第1页

<!DOCTYPE html>
<html lang="en">    
    <head>
        <meta charset="UTF-8">
        <title>Bio Data</title>
    </head> 
    <body>
        <form action="process.php" method="post">
            <label for="fst_name">
                First Name
                <input type="text" name="fst_name" id="fst_name">
            </label>

            <label for="lst_name">
                Last Name
                <input type="text" name="lst_name" id="lst_name">
            </label>

            <input name="submit" type="submit" value=" Login ">
        </form>
    </body>
</html>

第2页

<?php
session_start();

if (isset($_POST["submit"])){           
    $_SESSION['fst_name'] = $_POST['fst_name'] ;
    $_SESSION['lst_name' ] = $_POST['lst_name'] ;
    header("location:display.php");
}else{
    echo "Error";
}

PAGE3

<?php
session_start();
echo $_SESSION['fst_name'];
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Biodata Display</title>
    </head>
    <body>
        <table>
            <tr>
                <td><?php echo "Hello " .  $_SESSION['fst_name']; ?></td>
                <td><?php echo $_SESSION['lst_name']; ?></td>
            </tr>
        </table>    
    </body>
</html>

1 个答案:

答案 0 :(得分:1)

PHP中的会话通过保存由特殊cookie引用的数据文件服务器端(默认名为PHPSESSID)来工作,因此当您的浏览器发送正确的cookie时,PHP从保存的数据文件中提取前一个$ _SESSION值。这意味着:

  1. 您的服务器必须能够文件(通常在tmp目录中,检查与会话保存路径相关的PHP INI设置
  2. 您的浏览器必须接受Cookie(您可以通过转储$ _COOKIE轻松检查)
  3. 要简化测试,请创建一个这样的页面:

    <?php
    session_start();
    header("Content-Type: text/plain");
    var_dump($_COOKIE);
    var_dump($_SESSION);
    $_SESSION['hello'] = "world";
    

    加载此页面TWICE后,您应该在$ _SESSION和$ _COOKIE中看到正确的数据。如果它不起作用,则问题出在您的服务器/环境中。如果可行,我会再次查看您的代码,但第一眼看上去很好。