我目前正在使用SESSION变量进行重定向。 Hoprfully代码片段将使其清晰。
addForm.php:
if (!isset($_SESSION['myusername'])){
if (isset($_COOKIE['username'])){
$_SESSION['myusername'] = $_COOKIE['username'];
}
else{
#using a session var to redirect back to addForm.php
$_SESSION['addForm'] = 1;
header("location:loginForm.php");
}
}
LoginSuccess.php
session_start();
if (!isset($_COOKIE['username'])){
header("location:loginForm.php");
}
if (isset($_SESSION['addForm'])){
header("location:addForm.php");
}
以上作品(重定向到addForm.php)。我的问题是,这样做有什么风险吗?有更好的方法吗?我想我正在寻找'最佳实践'。
答案 0 :(得分:1)
您有一些错误:
header('Location: http://www.example.org/script.php');
通知L
和完整网址?header('Location: http://www.example.org/script.php');
之后应该是exit();
$_COOKIE['username']
,您需要输入密码,我的意思不是密码,也可能是MD5()
中的$_COOKIE
哈希密码。你应该知道不要那么依赖$_COOKIE
。LoginSuccess.php
中,您必须在重定向之前unset($_SESSION['addForm'])
,仍然会设置来自会话的addForm
。答案 1 :(得分:1)
Personnaly,我更喜欢在会话变量中存储条目当前URI。然后,当我的登录过程成功时,我使用存储的URI将用户重定向到上一页。
伪代码
if (!isset($_SESSION['userloginobj'])) {
$_SESSION['callbackuri'] = get_current_url_depending_of_your_process();
header('location:' . get_base_url() . 'index.php?do=login');
exit(0);
}
elseif ('login' == get_param('do')) {
// Show the login form
if ( is_login_successfull() ) {
$_SESSION['userloginobj'] = "userinfo";
header('location:' . $_SESSION['callbackurl']);
exit(0);
}
}
else {
// Normal process
}
但如果你不使用框架,你的过程似乎是一个好的开始。