Переменная сеанса 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('Ymd H:i:s'); if($actCode !== $activationCode) { echo ' <p> There was a problem activating your account. Please email <a href="mailto:activation@fiestausa.com?Subject=Account%20Activation">activation@fiestausa.com</a> </p> '; } elseif ($activationExpire < $now){ echo ' <p> Your activation code has expired. Please email <a href="mailto:activation@fiestausa.com?Subject=Account%20Activation">activation@fiestausa.com</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&a=fiverr

Solutions Collecting From Web of "Переменная сеанса PHP отображается как пустая при обновлении"

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

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