$_SESSION 未初始化 - PHP
$ _SESSION is not initialized - PHP
我有一个页面,我在其中 运行 对表单进行了三项检查:
1) 我 select 来自他 table 的用户 id (ID_Collaboratore) 当电子邮件对应于变量 $ email 时,如果电子邮件不存在我发送一个错误信息
2) 如果电子邮件与注册用户相关联,那么我会检查用户输入的令牌,如果令牌已被使用 (SI),则会发出错误消息,否则我会将该令牌从NO(未使用)到 SI(已使用),进行更新并将其发送到第二页。现在问题从这里开始。
我感兴趣的是:
case: 拥有现有邮箱的用户,输入可以使用的token,将token change 从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 è 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 è tentato di utilizzare un Token già 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'];
即使在用户被重定向到第二页时初始化,它总是给我一个假的并在索引中发回给我,为什么?
希望我能正确理解问题。当您的第二个片段是 index.php
时,您必须再次调用 session_start()
。
session_start() creates a session or resumes the current one based on
a session identifier passed via a GET or POST request, or passed via a
cookie.
Source
因此您必须在每次调用时调用 session_start()
才能恢复会话。
include('errore_reporting.php');
session_start(); // Important!
$messaggio = "";
if (isset($_POST['submit']))
// ... The rest of your code
我有一个页面,我在其中 运行 对表单进行了三项检查:
1) 我 select 来自他 table 的用户 id (ID_Collaboratore) 当电子邮件对应于变量 $ email 时,如果电子邮件不存在我发送一个错误信息
2) 如果电子邮件与注册用户相关联,那么我会检查用户输入的令牌,如果令牌已被使用 (SI),则会发出错误消息,否则我会将该令牌从NO(未使用)到 SI(已使用),进行更新并将其发送到第二页。现在问题从这里开始。
我感兴趣的是: case: 拥有现有邮箱的用户,输入可以使用的token,将token change 从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 è 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 è tentato di utilizzare un Token già 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'];
即使在用户被重定向到第二页时初始化,它总是给我一个假的并在索引中发回给我,为什么?
希望我能正确理解问题。当您的第二个片段是 index.php
时,您必须再次调用 session_start()
。
session_start() creates a session or resumes the current one based on a session identifier passed via a GET or POST request, or passed via a cookie. Source
因此您必须在每次调用时调用 session_start()
才能恢复会话。
include('errore_reporting.php');
session_start(); // Important!
$messaggio = "";
if (isset($_POST['submit']))
// ... The rest of your code