переменные сеанса — Php isset $ _GET не работает должным образом

Я пытаюсь пройти $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" }

-2

Решение

ДО:

В вашем коде есть проблема, которую я постараюсь объяснить:

  • Вы, пользователь, находитесь на 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,
  • Вы заполняете форму и отправляете ее.
  • После отправки значения «домен», «ключ» и «returning_user» записываются в сеанс.
  • Тогда вы будете перенаправлены на 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 при нажатии на кнопку, например после отправки формы.

Удачи!

first_page.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>

protector.php

<?php

session_start();

// Check domain and key.
if (!isset($_SESSION['domain']) || !isset($_SESSION['key'])) {
header('Location: first_page.php');
exit;
}

login.php

<?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...';
}
1

Другие решения

Если domain содержит ?ломает &key переменная.

Вы должны изменить свой first_page.php в

if($stmt){
header("Location: returning_user.php?domain=". urlencode($domain)."&key=".$key."");
}
1

Когда вы делаете include 'returning_user.php'; в login.phpкод в returning_user.php пробеги. Если вы проследуете этот путь кода сверху, вы увидите, что независимо от содержимого любых параметров, конечным результатом будет перенаправление — либо login.php каталог вниз (.. эти пути кажутся странными, так как это означает, что login.php вы добавили не то же самое login.php когда вы перенаправляете пользователя на) или first_user.php,

Я не уверен, что ты на самом деле хотел сделать include 'returning_user.php'; — кажется, что вы основали все остальное на этой странице, настраивая сеанс и затем перенаправляя пользователя к месту назначения, вместо того, чтобы включать файл (и когда он включается таким образом, вы импортируете переменные в текущий сфера — нет необходимости в сеансе для чего-то подобного).

0

Я вижу твое разочарование. Для начала вам необходимо удалить returning_user.php из Login.

Затем замените ваш код на следующий в логине:

session_start();

if(isset($_SESSION['returning_user'] == "TRUE")){
echo "Success!";
}

Также (и это, как правило, непопулярное мнение), чтобы избежать использования заголовков, которые могут вызвать другие проблемы в другом месте, я предпочитаю заканчивать свой тег PHP и размещать следующий Javascript

 <script>location.replace("whatever.php");</script>

А затем сразу после этого выберите мой PHP-тег.

0