$ _SESSION не инициализирован - PHP - PullRequest
0 голосов
/ 20 мая 2019

У меня есть страница, где я запускаю три проверки в форме:

1) Я выбираю идентификатор пользователя (ID_Collaboratore) из его таблицы, когда электронная почта соответствует переменной $ email, если электронная почта не существует, я отправляю сообщение об ошибке

2) Если электронное письмо связано с зарегистрированным пользователем, я проверяю введенный пользователем токен, где, если токен был использован (SI), выдается сообщение об ошибке, в противном случае я изменяю этот токен с NO ( не используется) для SI (используется), внесение обновления и отправка его на вторую страницу. Теперь проблема начинается здесь.

Что меня интересует: case: Пользователь с существующей электронной почтой, введите токены, которые можно использовать, измените токен с NO на YES, создание $ _SESSION ['collab_tkn'];

Поскольку на странице, на которую отправляется пользователь, будет проверка $ _SESSION, где, если $ _SESSION эквивалентна предыдущей странице, он может отображать содержимое страницы, в противном случае он будет отправлен на главную страницу

код:

<?php session_start(); ?>
<?php if(isset($_SESSION["collab_tkn"])){
include('error_reporting.php'); ?>
<!--Inserisci Codice-->
<?php }else{ 
header("Location: index.php?ut=N");?>
<?php } ?>

код моего php-скрипта для формы:

<?php 
                 include('errore_reporting.php');
                $messaggio = "";
                if (isset($_POST['submit'])) 
                {
                    include 'connection/cnt.php';
                    $token = $connessione->real_escape_string($_POST['rec_token']);
                    $utilizzato = $connessione->real_escape_string($_POST['utilizzato']);
                    $email = $connessione->real_escape_string($_POST['email']);

                    $controllo_collab = mysqli_query($connessione,"SELECT ID_Collaboratore FROM collaboratori WHERE email='".$email."'");
                    $verifica=mysqli_num_rows($controllo_collab);

                    if($verifica==0)  
                    {
                    $messaggio = '<div class="alert alert-danger" role="alert">
                                     Attenzione si &egrave; tentato di utilizzare un email inesistente. 
                                  </div>';
                    }
                    else
                    { 
                        $valori = $controllo_collab->fetch_array();
                        $_SESSION['collab_tkn'] = $valori['ID_Collaboratore'];

                        $query = $connessione->query("SELECT  utilizzato FROM token_rec_cred WHERE rec_token='$token'");
                        $data = $query->fetch_array();
                        $_SESSION['tkn_rec_cred'] = $data['utilizzato'];

                        if ($_SESSION['tkn_rec_cred'] == 'SI' )
                        {
                            $messaggio = '<div class="alert alert-danger" role="alert">
                                Attenzione si &egrave; tentato di utilizzare un Token gi&agrave; usato. 
                              </div>';
                        } 

                        if ($_SESSION['tkn_rec_cred'] == 'NO' )
                        {

                          $connessione->query("UPDATE token_rec_cred SET utilizzato='$utilizzato' WHERE rec_token='$token'");
                          header('Location: rec_cred.php?tokn=Y');
                        } 
                     }                   

                 }
                if ($messaggio != "") echo $messaggio; 
                ?>     

В настоящее время проблема заключается в этом фрагменте кода между запросом и инициализацией $ _SESSION, то есть:

$controllo_collab = mysqli_query($connessione,"SELECT ID_Collaboratore FROM collaboratori WHERE email='".$email."'");
$verifica=mysqli_num_rows($controllo_collab);

и

$valori = $controllo_collab->fetch_array();
$_SESSION['collab_tkn'] = $valori['ID_Collaboratore'];

даже если инициализируется, когда пользователь перенаправляется на вторую страницу, он всегда дает мне фальшивку и отправляет ее обратно в индекс, почему?

1 Ответ

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

Надеюсь, я правильно понял проблему.Если ваш второй отбитый номер - index.php, вам придется снова вызывать session_start().

session_start () создает сеанс или возобновляет текущий на основе идентификатора сеанса, переданного через GET илиPOST-запрос или передан через cookie. Источник

Таким образом, вы должны вызывать session_start() при каждом вызове, чтобы возобновить сеанс.

include('errore_reporting.php');
session_start(); // Important!
$messaggio = "";
if (isset($_POST['submit'])) 
    // ... The rest of your code

...