PHP - 发布表单或刷新页面时会话ID更改

时间:2017-07-10 06:42:31

标签: php session

问题在于,当我刷新页面时,会话ID会发生变化。

另外,当我在"下一页"并且到达" Page 2",session_id已经改变。所以,如果我在"上一页"并且到达" Page 1",我发现$_SESSION['a']$_SESSION['b']NULL

此外,如果我在浏览器的上一页按钮上点击,我会使用旧的session_id和$_SESSION['a']以及$_SESSION['b']到达旧的" Page 1"我发布的价值观。

如果我从localhost运行代码,则没有问题。 当我作为客户端运行并且代码在服务器上时,会出现问题。

我已经搜索了问题,我已经看到了答案,但我还没有找到解决方案。

这是我的代码:

page_1.php:

<?php 

session_start();

if (!$_POST){

    $a = $_SESSION['a'];
    $b = $_SESSION['b'];
}

elseif ($_POST){

    $a = $_POST['a'];
    $b = $_POST['b'];   
}

//--------------------------------------------------------------------------

if ( $_POST and $a and $b ){

    $_SESSION['a'] = $a;
    $_SESSION['b'] = $b;

    echo '<script language="JavaScript">
        self.location="page_2.php";
        </script>';
}


?>


<html>
<body>
<form action="page_1.php" method=post>

<?php

      echo $_SESSION['a'];
      echo $_SESSION['b'];
      echo session_id().' | '.session_name(); ?>

<!--
...(html code)... 
-->

<tr>
    <td><input type='submit' name='p1_submit' value="Next Page >>"></td>
</tr>

</form>
</body>
</html>

page_2.php:

<?php

session_start();

if (!$_POST){

    $c = $_SESSION['c'];
    $d = $_SESSION['d'];

}

elseif ($_POST){    

    $c = $_POST['c'];
    $d = $_POST['d'];

}   


if ($_POST and $c and $d)
    {

    $_SESSION['c'] = $c;
    $_SESSION['d'] = $d;


    echo '  <script language="JavaScript">
            self.location="page_3.php";
        </script>';
    }


?>


<html>

<body>

<form action="page_2.php" method=post>

<?php echo session_id().' | '.session_name(); ?>

<!--
...(html code)... 
-->

<tr>
    <td><button type="button" onclick="location.href='page_1.php';">Previous Page</button><input type='submit' name='p2_submit' value="Next Page >>"></td>
</tr>

</form>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

好的我自己回答了这个问题。

我通过在第1页之前添加一个起始页来解决了这个问题。

<强> start.php:

<?php 

session_start();

echo '<script language="JavaScript">
        self.location="page_1.php";
        </script>';

?>