我有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']
。有什么方法可以像上面那样传递一个论点吗?
答案 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='')是唯一的转移方式而不将其存储为会话。