Переменная сеанса PHP отображается как пустая при обновлении

Чтобы привести в порядок мой URL-адрес и упростить многоэтапный процесс активации, я запрограммировал свою страницу на сохранение идентификатора пользователя и кода активации из письма активации в качестве переменных сеанса. Когда userID и actCode находятся в URL, он сохраняет их как переменные сеанса, а затем перенаправляет для активации (я использовал htaccess, чтобы снять часть .php)

Он работает в первый раз (когда страница обновляется), но когда вы переходите на другой шаг или обновляете страницу вручную, он стирает их.

Вот мой код:

  <?php
error_reporting (E_ALL ^ E_NOTICE);
session_start();

if ( (!empty($_GET['u'])) && (!empty($_GET['a'])) ) {
$_SESSION["activate_userID"]        = $_GET['u'];
$_SESSION["activate_actCode"]       = $_GET['a'];
header( 'Location:activate') ;
}else{
$userID = $_SESSION["activate_userID"];
$actCode = $_SESSION["activate_actCode"];
echo 'session variable found: '.$actCode;
}

if ($actCode == ""){$actCode = "nUlL";}


require "***connection script***";



$checkCode = "SELECT ***account details***, `activationExpire` FROM `users` WHERE `userID` = \"$userID\"; ";
$result = $conn->query($checkCode);

if ($result->num_rows > 0) {
// output data of each row
while($actInfo = $result->fetch_assoc()) {
*** account details are here ***
$step               =   $actInfo['activationStatus'];
$activationCode     =   $actInfo['activationCode'];
$activationExpire   =   $actInfo['activationExpire'];
}
}
?>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<title>Activate - FiestaUSA</title>
<link href="includes/css/materialize.min.css" type="text/css" rel="stylesheet" media="screen,projection"/>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">

</head>

<body class="blue" background="includes/images/bg.jpg" style="background-size: cover;">
<div class="row">
<div class="col s10 m8 l6 offset-s1 offset-m2 offset-l3" style="padding-top: 50px">
<div class="card-panel z-depth-2 ">
<div class="row center">
<img src="includes/images/white480.png">
</div>
<div class="row">

<?php
$now = date('Y-m-d H:i:s');
if($actCode !== $activationCode) {
echo '
<p>
There was a problem activating your account. Please email
<a href="mailto:[email protected]?Subject=Account%20Activation">[email protected]</a>
</p>
';
}
elseif ($activationExpire < $now){
echo '
<p>
Your activation code has expired. Please email
<a href="mailto:[email protected]?Subject=Account%20Activation">[email protected]</a>
</p>
';

;} else {

if ($step == 6){
header( 'Location:signin') ;
}

if ($step == 5){
require "includes/php/activation/s5.php";
}

if ($step == 4){
require "includes/php/activation/s4.php";
}

elseif ($step == 3){
require "includes/php/activation/s3.php";
}

elseif ($step == 2){
require "includes/php/activation/s2.php";
}

elseif ($step == 1){
require "includes/php/activation/s1.php";
}
}
?>
</div>
</div>
</div>
</div>
</body>

</html>

Вы можете проверить это на
http://fiestausa.com/myevent/activate.php?u=2&а = Fiverr

1

Решение

Причина, по которой ваш сеанс может возвращать неожиданное поведение. Вы упомянули redirect вы выпускаете. Но вы перенаправляете на тот же домен а также поддомен?

Если ваш веб-сайт запрашивает версии как www, так и non-www, то вы можете получать разные сеансы, поскольку они рассматриваются как разные субдомены. Вы можете изменить свой htaccess, чтобы исправить это, или вы можете проверить это, зайдя в консоль разработки и напечатав document.cookie и сравнив две страницы.

0

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

Других решений пока нет …

По вопросам рекламы [email protected]