Переменная сеанса отображается пустой на другой странице - PullRequest
1 голос
/ 11 мая 2019

Редактировать: после выполнения проб и ошибок, я замечаю, что если я прокомментирую следующий код:

 $success = $_SESSION["success"];
session_unset($_SESSION["success"]); 

переменная $ to отображается как задумано. Поэтому мой вопрос: почему нельзя одновременно использовать оба?

Оригинальный вопрос:

Я пытаюсь отправить электронное письмо с помощью функции mail (). Для этого я передаю переменную $ _SESSION ['emailfrompass'] на 2 страницы, но по какой-то причине переменная всегда пуста. Хотя есть еще одна переменная, которую я отправляю с сообщением, и у меня нет проблем с ее получением, это единственная проблема, которая создает проблемы

session_start () устанавливается на всех страницах. Я пытался использовать

ini_set ( 'display_errors', 1); error_reporting (E_ALL);

для поиска проблемы, но бесполезно. Переменная всегда пуста

Это мой файл enterEFPass.php. Сверху у меня

<?php
session_start();
ini_set('display_errors',1); 
error_reporting(E_ALL); 
?>
 <?php 


    if(isset($_SESSION["success"]))
    {
       $success = $_SESSION["success"];
       session_unset($_SESSION["success"]); //echoing this will display the right thing
       $to = "";
       $to  = isset($_SESSION['emailforpass']) ? $_SESSION['emailforpass'] : 'not found';
       echo $to; //does not work


       //mail($to, "Reset your password", $message, $headers);


   ?>

     <div id='alert'>
      <div class='alert alert-block alert-info'>
      <?php   
       echo $success;

      // echo "<script>setTimeout(\"location.href = 'login-page.php';\",2500);</script>";
    ?>
      </div>
     </div>
<?php
}?>

И это enterEFPass_route.php, в котором я создаю переменные $ _SESSION

<?php
  session_start();
  include 'db.php';


  $email = "";
  $conn = Connect();
 if (isset($_POST['send_email_button'])) 
 {
     $email = mysqli_real_escape_string($conn, $_POST['email']); //$_POST['email'] the field where I introduce the email
 }
 if (empty($email)) { array_push($errors, "Please enter a valid email"); }
 if (count($errors)==0) // just an array for error messages
    {

        $_SESSION['emailforpass'] = $email; //appears empty always
        $_SESSION['success'] = "An email has been sent to the corresponding address. Please follow the instructions provided there"; //goes without problems

        header("location: enterEFPass.php");


    } else
    {
        $_SESSION['errormsgpassress']= $errors; //no problems in sending
        header("location: enterEFPass.php");
      }

  }
  ?>

Я ожидаю, что переменная $ to будет печататься на экране, но она всегда печатает "not found" Если я напечатаю $ _SESSION ['success'], в этом нет проблем

Ответы [ 2 ]

2 голосов
/ 12 мая 2019

Метод session_unset() не принимает аргументов. Он используется для сброса ВСЕХ переменных сеанса, поэтому он сбрасывает переменную $_SESSION['success']. Смотрите здесь для более подробной информации об этом. Вместо этого используйте unset($_SESSION['success']);, чтобы сбросить одну переменную сеанса. Надеюсь, это поможет!

0 голосов
/ 11 мая 2019

использовать session_start() только в том файле, в котором вы собираетесь установить значение сеанса, нет необходимости во всех файлах, вот как я использовал его в своих последних проектах для пользовательских систем входа в систему

...