Я пытаюсь создать простой веб-сайт с системой входа и регистрации для моего школьного проекта.
Процедура входа в систему в порядке, но есть проблема в системе регистрации. Я планировал предоставить приветственные документы студентам. Они будут использовать эти приветственные идентификаторы для регистрации на сайте. Во время регистрации, когда пользователь предоставит правильный идентификатор приветствия, только тогда он / она сможет продолжить. Я помещу все данные о регистрации в свою базу данных и буду использовать переменные сеанса для временного хранения статуса регистрации пользователя (идентификатор приветствия, электронная почта и т. Д.). Я назначу 16-значный sign_up_auth соответствующему приветственному идентификатору и сохраню его в файлах cookie на стороне клиента.
В случае, если пользователь закрыл браузер во время процесса регистрации и сеанс был уничтожен, я буду использовать sign_up_auth для создания переменных сеанса для пользователя, чтобы он / она могли возобновить регистрацию. Проблема слишком сложна.
В верхней части каждой страницы моей системы sign_up я использовал некоторый код, чтобы определить, существует сеанс или нет. Если сеанс не существует, я перенаправлю его на страницу регенерации сеанса, на которой будут использоваться файлы cookie sign_up_auth, и перенаправлю их на предыдущий шаг регистрации. Но если сеанс существует и пользователь завершил предыдущие шаги регистрации, он может перейти на текущую страницу. Я использую переменные сеанса, чтобы определить, сколько шагов регистрации было выполнено пользователем (1, 2 или 3. Всего 3).
Хорошо, теперь посмотрим ... Когда я снова открываю браузер (после его закрытия во время регистрации)
он делает обе вещи, во-первых, он перенаправляет меня на страницу sign_up_auth, а во-вторых, он использует свой собственный код для перенаправления, что должно происходить только в том случае, если сеанс существует.
Я попробовал почти все. Используется другая версия PHP. Очистили данные моего браузера. Перезапускал локальный сервер много раз. Я видел много статей и руководств, но ни одна из них не могла мне помочь.
<?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 (см. 2-ю строку кода)
Но это делает обе вещи ...
например, я на втором этапе регистрации (проверьте адрес электронной почты, предоставив OTP) и случайно закрыл браузер. При повторном открытии я ухожу в нужное место, но есть 2 перенаправления на эту страницу. (один из reg_provide_email и другой из reg_switch). Это почти невозможно. Я уверен, что я делаю где-то ошибку.