可以更改 php 会话变量吗?如果可以,如何更改?

Can php session variable be changed, and if so how?

我对会话变量一头雾水。我认为如果我设置一个会话变量,那么该变量将在任何以 session_start 开头的 php 文档中可用。但它不起作用。

表格:

<?php
session_start();
if(isset($_POST['hour'])) {
$_SESSION['hour'] = $_POST['hour'];
} 
?>
<!DOCTYPE html>
<html>
<body>
<form action='viewA.php' method='post'>
 <input type="text" name='hour' value='24'>
 <input type ='submit' name= 'submit' value='submit'>
</form>
</body>
</html>

我 post 到 viewA.php,它有效:

<?php
$hour = $_POST['hour'];
echo 'I am view A, and hour is '.$hour;

?>
<html>
<a href='View_B.php'>See View B</a>
<a href='TEST_form.php' >Choose another hour</a>
</html>

文件viewA.php有一个link到View_B.php;这是 View_B 的代码:

<?php
session_start();
print_r($_SESSION);
//$hour = $_SESSION['hour'];
//echo '... and in view B, hour is '.$hour;
?>
<html>
<a href='aatestform.php' >Choose another hour</a>
</html>

无论我在表格中输入什么,print_r($_SESSION); View_B 只输出Array ( [hour] => 13 ),这是我选择回来的第一个小时。我输入“22”;它输出 13。我输入“08”,它输出 13。

根据 w3schools,“To change a session variable, just overwrite it

我做错了什么?请帮忙!

在您的 viewA.php 中,您没有使用 $_POST 值存储/覆盖会话变量。

你只是在你的 TEST_form.php 中这样做,它没有得到任何 $_POST 所以你的 if(isset(... 是无用的。

您的 post 目的地(操作)是 viewA.php,这意味着您的请求将发送至 viewA.php

您在 form 页面和 View_B.php.

中仅 使用会话变量

如果您仔细查看 ViewA.php 中的代码,您会发现您只使用 POST 变量,而不是会话变量。

您在 form 页面中的 php 代码

<?php
session_start();
if(isset($_POST['hour'])) {
$_SESSION['hour'] = $_POST['hour'];
} 
?>

应移至 viewA.php。 这样做,viewA.php 将检查是否设置了 POST 变量 "hours"。在这种情况下,它会覆盖(或创建)会话变量 "hours".