Я пытаюсь пройти $user_domain
в login.php
, Я получаю значение от first_page.php
от header();
, В returning_user.php
Я установил переменную $_SESSION['returning_user']
чтобы моя программа знала, что делать в login.php
, Если все идет хорошо, пользователь остается на login.php
, Если что-то идет не так, пользователь перенаправляется на first_page.php
и должен повторно представить форму. Проблема, с которой я сталкиваюсь сейчас, заключается в том, что пользователь возвращается first_page.php
когда я включаю returning_user.php
внутри login.php
, Когда я его удаляю, пользователь остается на login.php
но похоже код между if()
заявление не выполняется. Я не знаю, что я делаю не так. Любая помощь будет принята с благодарностью.
first_page.php
//rest of code above
if($stmt){
header("Location: returning_user.php?domain=".$domain."&key=".$key."");
exit;
}
returning_user.php
session_start();
if(isset($_GET['key']) && isset($_GET['domain']) ){
//get domain variable
$user_domain = $_GET['domain'];
//put key variable in session
$_SESSION['user_domain'] = $user_domain;
//create a returning_user session
$_SESSION['returning_user']="TRUE";
//direct user to login page
header("location:../login.php");
exit;
}else{
header("location : first_page.php");
exit;
}
login.php
session_start();
include 'returning_user.php';
if(isset($_SESSION['returning_user']) && $_SESSION['returning_user']=="TRUE"){
//do something amazing here
}
var_dump ($ _ GET)
array(2) { ["domain"]=> string(10) "mydomain" ["key"]=> string(7) "7024158" }
ДО:
В вашем коде есть проблема, которую я постараюсь объяснить:
first_page.php
,returning_user.php
, Значения GET («домен» и «ключ») также передаются.returning_user.php
читает значения GET (которые теперь установлены), записывает их в сессию и перенаправляет вас login.php
(БЕЗ передачи значений GET тоже). Заметка: Технически вы передаете два значения GET на страницу (returning_user.php
) чтобы сохранить их там в сессии. Этот шаг, на мой взгляд, не нужен; Вы могли бы сохранить их в сессии непосредственно в first_page.php
,login.php
страница returning_user.php
Включено. Он пытается снова прочитать значения GET. Но, поскольку значения GET НЕ УСТАНОВЛЕНЫ, вы будете перенаправлены на first_page.php
,Другая проблема описана @MatsLindh.
ПОСЛЕ:
Поэтому я поделился некоторыми мыслями о том, чего вы хотите достичь, и пришел со следующим решением:
first_page.php
,login.php
,login.php
файл с именем protector.php
Включено. protector.php
проверяет, установлены ли значения сеанса «домен» и «ключ». Если нет, перенаправление на first_page.php
происходит.protector.php
успешно, то дальнейшие коды в login.php
могут быть обработаны. Как: прочитать переменную сеанса «returning_user» и сделать что-то удивительное там 🙂Заметки:
protector.php
как заменитель для вашего returning_user.php
,protector.php
на всех страницах, которые должны быть «защищены».first_page.php
в dashboard.php
,first_page.php
Я реализовал форму, чтобы иметь возможность отображать что-то на экране в случае перенаправления с другой страницы на first_page.php
и начать перенаправление на login.php
при нажатии на кнопку, например после отправки формы.Удачи!
<?php
session_start();
// Operations upon form submit.
if (isset($_POST['submitButton'])) {
$stmt = TRUE;
$domain = 'mydomain';
$key = '7024158';
if ($stmt) {
$_SESSION['domain'] = $domain;
$_SESSION['key'] = $key;
$_SESSION['returning_user'] = 1; // Don't use 'TRUE'.
header('Location: login.php');
exit;
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Demo</title>
<style type="text/css">
.header, .section { padding: 10px; }
.header { border-bottom: 1px solid #ccc; background-color: #eee; }
.section div { padding-bottom: 10px; }
.section button { padding: 10px; color: #fff; border: none; width: 200px; background-color: #269abc; }
</style>
</head>
<body>
<header class="header">
<h3>
Welcome! You are on the first page ;-)
</h3>
</header>
<section class="section">
<form action="" method="post">
<div>
Here comes some form content...
</div>
<button type="submit" name="submitButton">
Submit
</button>
</form>
</section>
</body>
</html>
<?php
session_start();
// Check domain and key.
if (!isset($_SESSION['domain']) || !isset($_SESSION['key'])) {
header('Location: first_page.php');
exit;
}
<?php
require_once 'protector.php';
echo 'Page validation successful.';
echo '<br/><br/>';
if (isset($_SESSION['returning_user']) && $_SESSION['returning_user']) {
echo 'I will do something amazing here...';
}
Если domain
содержит ?
ломает &key
переменная.
Вы должны изменить свой first_page.php
в
if($stmt){
header("Location: returning_user.php?domain=". urlencode($domain)."&key=".$key."");
}
Когда вы делаете include 'returning_user.php';
в login.php
код в returning_user.php
пробеги. Если вы проследуете этот путь кода сверху, вы увидите, что независимо от содержимого любых параметров, конечным результатом будет перенаправление — либо login.php
каталог вниз (.. эти пути кажутся странными, так как это означает, что login.php
вы добавили не то же самое login.php
когда вы перенаправляете пользователя на) или first_user.php
,
Я не уверен, что ты на самом деле хотел сделать include 'returning_user.php';
— кажется, что вы основали все остальное на этой странице, настраивая сеанс и затем перенаправляя пользователя к месту назначения, вместо того, чтобы включать файл (и когда он включается таким образом, вы импортируете переменные в текущий сфера — нет необходимости в сеансе для чего-то подобного).
Я вижу твое разочарование. Для начала вам необходимо удалить returning_user.php из Login.
Затем замените ваш код на следующий в логине:
session_start();
if(isset($_SESSION['returning_user'] == "TRUE")){
echo "Success!";
}
Также (и это, как правило, непопулярное мнение), чтобы избежать использования заголовков, которые могут вызвать другие проблемы в другом месте, я предпочитаю заканчивать свой тег PHP и размещать следующий Javascript
<script>location.replace("whatever.php");</script>
А затем сразу после этого выберите мой PHP-тег.