会话变量在不同页面上显示为空
Session variable appears empty on different page
编辑: 经过反复试验后,我注意到如果我评论以下代码:
$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
}?>
这是我在其中实例化 $_SESSION 变量的 enterEFPass_route.php
<?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'] 就没有问题
方法session_unset()
不接受任何参数。它用于取消设置所有会话变量,因此它正在取消设置 $_SESSION['success']
变量。有关详细信息,请参阅 here。相反,使用 unset($_SESSION['success']);
取消设置单个会话变量。希望这对您有所帮助!
编辑: 经过反复试验后,我注意到如果我评论以下代码:
$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
}?>
这是我在其中实例化 $_SESSION 变量的 enterEFPass_route.php
<?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'] 就没有问题
方法session_unset()
不接受任何参数。它用于取消设置所有会话变量,因此它正在取消设置 $_SESSION['success']
变量。有关详细信息,请参阅 here。相反,使用 unset($_SESSION['success']);
取消设置单个会话变量。希望这对您有所帮助!