html 表单中的操作属性是否会干扰存储在 $_SESSION 全局变量中的内容


Does action attribute in html forms interfere with what's stored in $_SESSION global variable?

假设我有两个页面:page01.php和page02.php(它们的代码如下所示)。

如果我将 page01 上的表单中的操作属性留空.php为空(即 action="),然后访问 page01.php,填写表单,按提交,然后访问 page02.php - 一切正常(即 $_SESSION 变量存储在 page01 上提交的数据.php并且可以按预期在 page02 上访问和查看.php)。

但是,当我尝试使表单将用户发送到 page02.php(通过将操作 atrribute 更改为 action="page02.php")时,看起来 $_SESSION 全局变量不存储 page01.php 中的数据。

我的问题是:发生这种情况是因为用户在提交表单后立即被重定向到 page02.php并且 page01 上的 php 标签之间的代码.php没有被执行?

我知道我可以在第 02 页上使用 $_GET 或 $_POST 来实现所需的行为.php但我只是想了解操作属性和 $_SESSION 交互的方式。谢谢。

页01.php:

<html>
<head>
    <title>Page 01</title>      
</head>
<body>
    <h1>Please fill this form</h1>
    <form action="" method="post">
        Name:  <input name="username">
        <input type="submit" value="send">
    </form>
    <?php   
        session_start();
        if(isset($_POST['username'])) {
            $_SESSION['username']=$_POST['username'];
        }
    ?>
</body>

第02.php页:

<html>
<head>
    <title>Page 02</title>      
</head>
<body>
    <h1>Another temporary page is working</h1>
    <?php
        session_start();
        $expectedName = "Bob";
        if($_SESSION['username'] == $expectedName) {
            echo "Welcome, Bob!";
        }
        else {
            echo "Access denied. You are ". $_SESSION['username']  . ", not Bob.";
        }
    ?>
</body> 

action 属性是您指定提交后需要运行脚本的位置的属性。

因此,如果您希望在提交表单后重定向用户,请使用 header() 函数。