将PHP版本升级到7.2后,PHP会话不工作



simple网站在php5.3上运行良好,但在升级我的php版本后,会话上出现错误。但是为了登录我的网站管理页面,我一直在使用以下代码。

login.php

<?php
session_start();
$msg = "";
include 'connection/conn.php';
if(isset($_POST['submit']))
{
$email = $conn-> real_escape_string($_POST['email']);
$password = $conn-> real_escape_string($_POST['password']);
$error="Check Your Inputs";
$sql = $conn-> query("SELECT id ,passwor FROM users WHERE email='$email'");
if ($sql->num_rows > 0) {
$data = $sql ->fetch_array();
if (password_verify($password, $data['passwor'])) 
{
$_SESSION['logedinemail'] = $email;
header("Location: Dash"); 
exit();
}
else
{
$msg ="Please Check Your Inputs";
}


}
}


?>

和我的仪表板

<?php 
session_start();
if ($_SESSION['logedinemail']==true) {

}
else
{

header("Location: index.php"); 
}

?>

但最近我将php版本升级到了7.2,出现了以下错误PHP注意:未定义的索引:在/home/xx/yy/zz/Dash.PHP第3行登录电子邮件感谢

如果您没有登录,或者在数据库中找不到您的用户,或者密码不正确,那么您就没有在会话数组中创建索引"logedinmail"。

当您执行$_SESSION['logedinemail'] == true时,PHP会尝试比较值,但$_SESSION中的索引没有创建,并且您会看到您正在查看的错误。

在login.php中使用$_SESSION['logedinemail'] = false全局初始化这个超级全局(在执行if(isset($_POST['submit']))之前(,或者检查它是否设置为(在仪表板中(:

if (isset($_SESSION['logedinemail']) && $_SESSION['logedinemail'] === true) { ... }

此外,最好始终将类型secure与===而不是==进行比较。

最新更新