$_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
数据。
观察:
从 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
数据。