在php中通过标头传递参数

时间:2010-05-21 07:45:04

标签: php header

我有3个文件:

  • login.html
  • login_check.php
  • welcome.php

login.html输入用户名和密码并单击提交按钮时,login_check.php将根据$_POST['username']和某些SQL查询检查用户名条目是否在数据库中。现在我将以下代码放在login_check.php

的底部

login_check.php

header('Location:welcome.php') 

但我想将$_POST['username']login_check.php传递给welcome.php,以便我可以在欢迎页面中使用$_POST['username']。有什么方法可以像上面那样传递一个论点吗?

5 个答案:

答案 0 :(得分:10)

请改用 session ,因为无论您在欢迎页面登陆哪个页面,您都会在欢迎页面上每次都显示用户名。

您可以在login_check页面上设置会话,如:

session_start(); // this should be on top of login_check file

// this goes just before redirect line
$_SESSION['username'] = $_POST['username'];

现在,在欢迎页面上,您可以显示如下用户名:

session_start(); // this should be on top of welcome page.
echo `Welcome ` . $_SESSION['username'];

答案 1 :(得分:4)

“使用标题(wwww.xxx.com?action='')将是唯一的转移方式而不将其存储为会话”

就够了

答案 2 :(得分:0)

这可以使用QUERY_STRING来完成(我相信你以前见过它 - 这些?和地址栏中的&'),但你不应该这样做,因为它只是不安全。

session是在登录和授权后存储用户名的常用方法。

答案 3 :(得分:0)

会话应用于会话数据 - 不适用于与特定页面转换相关的数据。但是,记录用户已经过身份验证的事实以及他们验证的用户名是会话数据。

因此,虽然您不应该使用会话数据将信息从login.php传递到login_check.php,但是在login_check.php中,如果身份验证成功,那么您应该在会话中存储经过身份验证的用户名。

虽然像Shrapnel牧师所说的那样:

header('Location:welcome.php?username=' . urlencode($_POST['username']));

这是微不足道的 - 你只需要在浏览器中输入welcome.php?username = admin来破坏安全性。

如果仍然不清楚,请考虑用户同时打开两个浏览器窗口,浏览网站的不同部分(即使用相同的会话数据)的情况。如果两个浏览器同时提交数据并写入会话并且您不确定结果,那么您可能不应该将数据保留在会话中。

HTH

下进行。

答案 4 :(得分:-1)

使用标题(www.xxx.com?action='')是唯一的转移方式而不将其存储为会话。