【发布时间】:2015-06-18 10:10:18
【问题描述】:
假设,我有两个页面:page01.php 和 page02.php(它们的代码如下所示)。
如果我将 page01.php 表单中的 action 属性留空(即 action=""),则访问 page01.php,填写表单,按提交,然后访问 page02.php - 一切正常(即$_SESSION 变量存储在 page01.php 上提交的数据,可以在 page02.php 上按预期访问和查看)。
但是,当我尝试让表单将用户发送到 page02.php(通过将操作属性更改为 action="page02.php")时,看起来 $_SESSION 全局变量不存储来自 page01 的数据。
我的问题是:这是因为用户在提交表单后立即被重定向到 page02.php 并且 page01.php 上的 php 标签之间的代码没有被执行吗?
我知道我可以在 page02.php 上使用 $_GET 或 $_POST 来实现所需的行为,但我只是想了解 action 属性和 $_SESSION 交互的方式。谢谢你。
Page01.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>
Page02.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>
【问题讨论】:
-
你是对的......它的bcoz page01.php中存储会话数据的代码没有被执行。
-
发生这种情况是因为在 page2 上您不使用 post 值,仅在 page1.php 上使用
-
您没有为 page1 上的会话数组分配任何值,如果检查会阻止该值