【问题标题】:$ _SESSION is not initialized - PHP$ _SESSION 未初始化 - PHP
【发布时间】:2019-10-07 05:28:47
【问题描述】:

我有一个页面,我在一个表单上运行三个检查:

1) 当电子邮件对应于变量 $ email 时,我从他的表中选择用户 ID (ID_Collaboratore),如果电子邮件不存在,我会发送错误消息

2) 如果电子邮件与注册用户相关联,那么我检查用户输入的令牌,如果令牌已被使用 (SI),则会发出错误消息,否则我将该令牌从 NO (未使用)到 SI(使用),进行更新并将其发送到第二页。现在问题从这里开始。

我感兴趣的是: 案例:已有邮箱的用户,输入可以使用的token,将token从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'];

即使在用户被重定向到第二页时初始化,它总是给我一个假的并在索引中将它发送回我,为什么?

【问题讨论】:

    标签: php session session-variables


    【解决方案1】:

    我希望我能正确解决问题。当您的第二次剪断是index.php 时,您必须再次调用session_start()

    session_start() 创建会话或恢复当前会话 通过 GET 或 POST 请求传递的会话标识符,或通过 曲奇饼。 Source

    因此,您必须在每次通话时拨打session_start() 才能恢复会话。

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

    【讨论】:

    • 我的朋友从这里我意识到我很累哈哈哈哈哈哈哈,非常感谢,我知道代码是正确的,但我不明白为什么它不起作用,但是喜欢代码也是这个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2021-12-14
    • 2013-06-26
    • 2016-04-02
    • 2020-02-14
    相关资源
    最近更新 更多