我需要将用户重定向到他们成功执行以下两项操作之一后的页面:1)输入他们的邀请码,或2)登录。
我正在尝试应用here发布的答案,但在花了几个小时试图让它上班失败后,我意识到是时候寻求帮助了。
为了削减代码,我只包含了与选项1(邀请代码)相关的代码段。此外,为了首先使用更简单的版本(并且更密切地复制给定的示例),我暂时从这些页面中删除了iframe。
代码添加
auth_invite_launch.php
//CODE #1
header("Location:sign_in.php?location=".urlencode($_SERVER['REQUEST_URI']));
$redirect = NULL;
if ($_POST['location'] != '') {
$redirect = $_POST['location'];
}
sign_in.php
//CODE #2
echo '<input type="hidden" name="location" value="';
if (isset($_GET['location'])) {
echo htmlspecialchars($_GET['location']);
}
echo '" />';
invite_code - exec.php(此处提交sign_in.php)
//CODE #3
if ($redirect)) {
header("Location:".$redirect);
}
预先存在的代码
createaccount.php
require_once('config/auth_invite_launch.php'); // session_start & checks if authorized
is_user_auth(); // Checks if authorized
is_user_logged(); // Checks if logged in
get_logged_user_id();
if (is_user_logged() == TRUE) {
$logged_in = true;
$user_id = $_SESSION['SESS_USER_ID'];
}
auth_invite_launch.php
function is_user_auth(){
// Checks if logged in to Member Account or has valid Invite Code
if (isset($_SESSION['SESS_USER_ID']) || isset($_SESSION['TEMP_INVITE_ID'])){
return true;
}
//Replaced by CODE #1
header("location: sign_in.php"); // Redirects if not authorized user
}
// Checks if logged in to member account
function is_user_logged(){
if ( isset($_SESSION['SESS_USER_ID']) ){
return true;
}
return false;
}
// Retrieves ID if logged in to member account, NULL otherwise
function get_logged_user_id(){
if ( is_user_logged() === TRUE ){
return $_SESSION['SESS_USER_ID'];
}
return null;
}
invite_code - exec.php(此处提交sign_in.php)
// PRECEDED BY statement to fetch matching invite codes from db
if ($stmt - > rowCount() == 1) {
$invite = $stmt - > fetch();
$_SESSION['TEMP_INVITE_ID'] = $invite['idinvite_codes'];
$_SESSION['TEMP_INVITE_CODE'] = $invite['invitation_code'];
$invite_code = "true";
//CODE #3 Added here
} else {
$invite_code = "false";
header("location: index.php");
exit();
}
答案 0 :(得分:1)
评论中的最后一个问题相当广泛:如何在表单重定向循环中跟踪执行路径?我会试一试。
假设您的授权脚本有一个登录检测设备,那么如果用户没有登录,它将重定向到登录系统:
if (!isLoggedin())
{
header('Location: /login.php?location=' . urlencode(getCurrentUrl()));
exit();
}
因此,在您的登录表单中,您将需要一个POST操作,其中包含重定向位置的隐藏字段(看起来您在sign_in.php
中有此操作):
<?php
// Handle post
if ($_POST)
{
if (loginCorrect())
{
// Redirect to the redirect location
// cleanUrl() should ensure the user input pertains to a
// local script name, so it cannot be used as a spammer's
// redirection device
header('Location: ' . cleanUrl($_POST['redirect']));
exit();
}
}
?>
<form method="post">
<!-- hidden field containing redirect location -->
<!-- username/password fields -->
</form>
然后您希望URL到达重定向位置。这是四页(一个重复):
每个都可以调试。纯粹主义者会说你应该使用xDebug和一个调试器(在你的IDE中控制),但echo
和exit
都可以。只需将它们添加到上面四个页面的顶部,然后查看重定向位置(或其他变量)是否正确:
echo 1;
exit();
有时我会添加其中的一些内容,以了解控件在单个页面中的工作原理。版本控制在这里几乎是必不可少的,因为能够轻松删除它们很重要 - 您显然不希望部署包含调试语句的代码。
也值得在登录表单页面上使用View Source,以确保正确填充隐藏字段。