我正在尝试为我的学校项目构建一个具有登录和注册系统的简单网站。
登录过程很好,但是注册系统存在问题。我已经计划向学生提供欢迎ID。他们将使用这些欢迎ID在网站上注册。在注册期间,如果用户将提供正确的欢迎ID,则只有他/她可以继续。我将所有注册数据放入我的数据库中,并使用会话变量临时存储用户的注册状态(欢迎ID,电子邮件等)。我将为相应的欢迎ID分配一个16位的sign_up_auth并将其存储在客户端Cookie中。
如果用户在注册过程中关闭了浏览器并且会话被销毁,那么我将使用sign_up_auth为用户重新生成会话变量,以便他/她可以恢复注册。问题太复杂了。
在我的sign_up系统每一页的顶部,我使用了一些代码来检测会话是否存在。如果会话不存在,我会将其重定向到会话重新生成页面,该页面将使用sign_up_auth cookie并将其重定向至上一步的注册。但是,如果存在会话并且用户已经完成了先前的注册步骤,则他/她可以在当前页面上继续。我正在使用会话变量来检测用户完成了多少个注册步骤(1或2或3。总共3个)。
好的,现在看到...当我重新打开浏览器时(在注册过程中关闭它之后) 它正在做这两种事情,首先是将我重定向到sign_up_auth页面,其次是使用自己的代码重定向,只有在存在会话的情况下才应该发生。
我几乎尝试了所有方法。使用了不同版本的PHP。清除了我的浏览器数据。重新启动localhost服务器多次。我看过很多文章和指南,但没有一个可以帮助我。
<?php
session_start();
if (!isset($_SESSION["sign_up_level"])) {header("location: reg_switch.php");} /*THIS IS EXECUTING*/
///////////////////////////////////////
if ($_SESSION["sign_up_level"] == 404) { $_SESSION["redir_from_provide"] = true; header("location: registration.php"); exit(); }
if ($_SESSION["sign_up_level"] == 2) { $_SESSION["redir_from_provide"] = true; header("location: reg_verify_email.php"); exit(); } /*THIS IS ALSO EXECUTING, AND IT'S PROBLEM */
if ($_SESSION["sign_up_level"] == 3) { $_SESSION["redir_from_provide"] = true; header("location: final_registration.php"); exit(); }
///////////////////////////////////////
$x = time();
$ZZZ = date("Y-m-d H:i:s", $_SESSION["session_exp"]);
$HHH = strtotime($ZZZ);
if ($x > $HHH) { $_SESSION["sign_up_level"] = 404; $_SESSION["redir_from_provide"] = true; header("location: registration.php"); exit(); }
/////////////////////////////////////////////////////////////////////////////////////////
////////////BELOW IS THE CODE FROM THE FILE THAT WILL VERIFY SIGN_UP_AUTH COOKIES///////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
<?php
session_start();
if (isset($_COOKIE["sign_up_auth"]) && empty($_SESSION["sign_up_level"]))
{//MAIN_111
//Retrive data from Cookies
$sign_up_auth = $_COOKIE["sign_up_auth"];
// Server Variables
$DBhost = "localhost";
$DBuser = "root";
$DBpswd = 'PASSWORD';
$DB = "testDB";
// Create connection
$conn = new mysqli($DBShost, $DBSuser, $DBSpswd, $DB);
// Look for Existence of auth Cookie
$stmt = $conn->prepare("Select * from sign_up_table where cookie_auth = ?");
$stmt->bind_param("s", $sign_up_auth);
$stmt->execute();
$result = $stmt->get_result();
while($row = $result->fetch_assoc()) { $resultset[] = $row; } // Form an Array of $result
// Verify Existance
$x = time();
$ZZZ = date("Y-m-d H:i:s", $resultset[0]["cookie_exp"]);
$HHH = strtotime($ZZZ);
if ($result->num_rows == 1)
{
if ($x < $HHH) // reg_auth is not expired
{
$_SESSION["welcome_id"] = $resultset[0]["welcome_id"]; //2nd
$_SESSION["session_exp"] = $resultset[0]["cookie_exp"]; //3rd
/////
if ($resultset[0]["sign_up_level"] === 1) { $_SESSION["sign_up_level"] = 1; $_SESSION["redir_from_switch"] = "from switch to provide."; header("location: reg_provide_email.php"); } //Provide Email Page
if ($resultset[0]["sign_up_level"] === 2) { $_SESSION["sign_up_level"] = 2; $_SESSION["redir_from_switch"] = "from switch to verify"; $_SESSION["sign_up_email"] = $resultset[0]["sign_up_email"]; header("location: reg_verify_email.php"); } //Enter OTP Page
if ($resultset[0]["sign_up_level"] === 3) { $_SESSION["sign_up_level"] = 3; $_SESSION["redir_from_switch"] = "from switch to final."; $_SESSION["sign_up_email"] = $resultset[0]["sign_up_email"]; header("location: final_registration.php"); } //Final Registration Page
/////
} else { $_SESSION["sign_up_level"] = 404; $_SESSION["redir_from_switch"] = "Session_Cleared:-Cookie Expired"; header("location: registration.php");} //expired
} else { $_SESSION["sign_up_level"] = 404; $_SESSION["redir_from_switch"] = "Session_Cleared:-Cookie Auth Invalid"; header("location: registration.php");} // cookies auth invalid
} else { $_SESSION["sign_up_level"] = 404; $_SESSION["redir_from_switch"] = "Session_Cleared:-Cookie not found"; header("location: registration.php");} //cookie not found
?>
我期望它会将我重定向到reg_switch.php(请参见第二行代码) 但是它同时做两件事...
例如,我正在注册的第二步(通过提供OTP验证电子邮件),偶然关闭了浏览器。重新打开后,我会转到正确的位置,但是有2个重定向到该页面。 (一个来自reg_provide_email,另一个来自reg_switch)。那几乎是不可能的。我确定我在某个地方做错了。