Php 当我导航到其他页面时,会话未被保留/销毁

Php 当我导航到其他页面时,会话未被保留/销毁,php,Php,你好。所以我有一个问题,当我通过登录创建一个会话,并且一个用户经过身份验证时,一旦我离开该页面说另一个页面,我首先不知道会话是否被破坏,我要求该页面保存会话,以便我能够从中查询用户的电子邮件,并使用它查询数据库以确定用户名 这是my submit.php,在用户单击页面上的登录时调用 <?php session_start(); require_once('connect.php'); if(isset($_POST) & !empty($_POST)){ $emai

你好。所以我有一个问题,当我通过登录创建一个会话,并且一个用户经过身份验证时,一旦我离开该页面说另一个页面,我首先不知道会话是否被破坏,我要求该页面保存会话,以便我能够从中查询用户的电子邮件,并使用它查询数据库以确定用户名

这是my submit.php,在用户单击页面上的登录时调用

  <?php
session_start();
require_once('connect.php');

if(isset($_POST) & !empty($_POST)){
    $email = mysqli_real_escape_string($connection, $_POST['email']);
    $password =$_POST['password'];
    $sql = "SELECT * FROM `USERS` WHERE EMAIL='$email' AND ENCRYPTEDPWD='$password'";
    $result = mysqli_query($connection, $sql);
    $count = mysqli_num_rows($result);

    if($count == 1){
        $_SESSION['email'] = $email;
        header("Location: Landing page.php"); 
    exit();
    }
    else{
        header("Location: customerportal.php?login=invalid");   
        exit(); 
        }
    }


?>

它会重定向到下一页,即登录页。 此页面应检查会话中的电子邮件,然后显示用户名

<?php
            session_start();
            $_SESSION['email'] = $email;
            $sql = "SELECT * FROM users WHERE EMAIL='$email';";
            $result = mysqli_query($connection,$sql);
            $resultCheck = mysqli_num_rows($result);

            if($resultCheck > 0){
                while($row = mysqli_fetch_assoc($result)){
                    echo $row['username'];                  
                }               
            }

            else{
                echo "No User.";
            }

            ?>


请提供帮助。

您对以下行中的登录页有问题:-

$_SESSION['email'] = $email;// here you are assigning to SESSION
它需要:-

$email = $_SESSION['email'];//assign value from SESSION to variable
所以代码需要如下:-

注意:-您的代码对于
SQL注入是完全开放的。尝试使用
准备好的语句来防止它


在登录页中,在会话\u start()之后反转该行:您正在分配一个空变量以覆盖已保存的会话变量

$email = $_SESSION['email'];
如果您的查询在此之后给您带来问题,请尝试连接$email

$sql = "SELECT * FROM users WHERE EMAIL='".$email."';";

登录页.php
?为什么有空间?在登录页中,您需要将值从
$\u会话['email']
分配到
$email
,而不是
$\u会话['email']=$email
OP的查询是正确的,仅当您使用
'
quotes和
不是强制性的。谢谢您提供的信息!我建议使用它是因为它有时会给我带来问题,特别是当邮件验证不是在字符级别操作时。这使得它很容易在电子邮件中使用引号字符,从而破坏查询。由于现在的值是
$email.
(注意
),而不是
$email
。是的,我的错。修复了“$email”中的“
”和“
”中的“
”一起引用的问题。
实际上不是必需的。OP所说的是正确的。外部的双引号将完美地解析变量。也
也是不必要的。(不会产生问题,但不必要)非常感谢!!!!它起作用了,反转了登录页会话set@AshleyNesh很高兴帮助你:):)
$sql = "SELECT * FROM users WHERE EMAIL='".$email."';";