$_SESSION 不保留页面之间的值

$_SESSION does not keep values between pages

观察:

从 page_1 和 page_2 发送表单数据不会在结果文件中显示这两个数据。 如果发送 page_1 会在结果文件中看到结果。当发送 page_2 时,page_1 的结果消失了,你只看到 page_2。它表现为 $_SESSION['data'] 的内容是 每次发送 page_1 或 page_2.

时都会覆盖

所有 3 个页面的会话 ID 相同。

想要的结果:

每次 运行 result.php 应该看到累积的动作,例如如果第一次按 page_1 你只会看到 page_1 数据,如果按 page_2 你会同时看到 page_1- 和 page_2- 数据。第二次按 page_1 时, page_1 值应更新并在按 result.php

时可见

PHP版本

航站楼:PHP7.4.6

浏览器:7.3.18-1+ubuntu18.04.1+deb.sury.org+1

Page_1:

<?php
session_start();
echo session_id();
?>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Page-1</title>
</head>
<body>

<form method="post">
  <br><br>
  <input type="text" name="input_1" value="">
  <button type="submit" name="button">Save</button>
</form>

<pre>

<?php

$_SESSION["data"] = $_POST;
print_r($_SESSION);

?>

</body>
</html>

Page_2:

<?php
session_start();
echo session_id();
?>

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Page-2</title>
</head>
<body>

<form method="post">
  <br><br>
  <input type="text" name="input_2" value="">
  <button type="submit" name="button">Save</button>
</form>

<pre>

<?php

$_SESSION["data"] = $_POST;
print_r($_SESSION);

?>

</body>
</html>

结果:

<pre>

<?php
session_start();
echo session_id() . "<br /><br />";
print_r($_SESSION);

每次发送表单时都会覆盖 $_SESSION

你应该使用其中之一

if(!empty($_POST)) {
    $_SESSION["data"]['page1'] = $_POST; //and analogically for page2
}

$_SESSION["data"] = array_merge($_SESSION["data"],$_POST);

It behaves as the content of $_SESSION['data'] is overwritten every time one sends either page_1 or page_2.

因为这正是您正在做的。 $_SESSION["data"] = $_POST; 行出现在 page_1 和 page_2 中,并且在写入新数据之前没有任何内容可以保留 $_SESSION["data"] 的旧值。

如果您想添加数据而不是替换它,您可以在两个页面中都写上,例如,$_SESSION["data"][] = $_POST;。这将在 $_SESSION["data"] 中创建一个数组,并在您每次打开任一页面时向其附加 $_POST 数据。