【问题标题】:$_SESSION not storing the values [duplicate]$_SESSION 不存储值[重复]
【发布时间】:2022-02-13 07:41:17
【问题描述】:

当我打印 print_r($SESSION) 函数时,它显示为空。这是下面的代码(ps。暂时不要担心SQL注入)。

其他一切都完美无缺,错误完美显示。它只是会话值空了!

<?php
session_start();
include 'dbconnect.php';
$emailerror = $passworderror = "";

if(isset($_POST['submit']))
{


    $email= $_POST["email"];
    $password= $_POST["password"];

    if (empty($email)) {
        $emailerror = "*Email must be entered";
    }

    elseif (!filter_var($email, FILTER_VALIDATE_EMAIL))
    {   
        $emailerror= "*Invalid email address Entered";    
    }

    // To check if email has already been used or if another account with the same email exists
    else{         
        $emailquery = ("SELECT * FROM `Potential_Employee` WHERE `Email` = '$email'");
        $emailcheckresult = mysqli_query($connection, $emailquery);


        if(mysqli_num_rows($emailcheckresult) == 1){            
            $row=mysqli_fetch_assoc($emailcheckresult);

            if (!password_verify($password, $row['Password'])){
                $passworderror = "*Password is incorrect!";
            }
            else{
                $_SESSION['Email'] = $email;
                $_SESSION['logged_in'] = true;
                echo "<script>document.location='EmployeeDashboard.php';</script>";

            }

        }
        else{
            $emailerror = "*Email does not exist";
        }

    }

    if (empty($password)) {
        $passworderror = "*Password must be entered";
    }

    elseif (strlen($password) < 4 )
    {
        $passworderror= "*Password Has to be greater than 8 Characters";
    }

【问题讨论】:

  • 一点提示,我不会提及 SQLi .. 如果您存储错误,例如。 $emailerror, $passworderror 在像 $errors['email'], $errors['password'] 这样的数组中,您可以简单地检查它是否为空,否则会出现各种错误。它将通过更好的分组使其更简洁,更容易传递给视图等,并且一旦您进入具有 20 多个输入的表单,您将不需要记住所有全局变量,只需调试一个变量。快乐编码..
  • 好点@LawrenceCherone 快乐编码
  • @LawrenceCherone 啊,好的,谢谢。

标签: php sql session


【解决方案1】:

您需要像下面这样调试 SESSION:

print_r($_SESSION);

或者

echo '<pre>' . print_r($_SESSION, TRUE) . '</pre>';
// Make second argument TRUE so it will return instead of echo

或者

echo '<pre>';
var_dump($_SESSION);
echo '</pre>';

【讨论】:

  • 如果我可以问,调试是什么意思?抱歉,我对这些术语不熟悉。我还尝试了你的第一个函数来查看会话中的内容,它以 Array -> () 或其他形式出现。数组为空
  • 表示打印所有会话以检查它们是否到来。您以错误的方式打印 print_r($SESSION)
  • 它是空的,因为它根本不存在,因为你的 if 条件从未满足
  • 我认为条件已经满足,因为如果你看到我把 $_SESSION 函数放在同一个地方,它会重定向到另一个页面。它仍然重定向,但 $session 值仍然为空
  • 确保您在 else 条件下设置会话
【解决方案2】:

看起来只是一个错字。

使用:

$_SESSION

不是

$SESSION

所以这应该可以工作:

print_r($_SESSION)

https://www.w3schools.com/php/php_sessions.asp

【讨论】:

    猜你喜欢
    • 2014-08-20
    • 2015-01-05
    • 2016-03-17
    • 2020-09-15
    • 1970-01-01
    • 2022-06-27
    • 2018-03-31
    • 2016-07-23
    • 2012-01-18
    相关资源
    最近更新 更多