在$ _SESSION中存储查询中的数据

时间:2016-05-10 12:52:58

标签: php session

我到处寻找,但大多数解决方案已经过时或令人困惑。

用户的电子邮件和密码匹配后,他们的姓名和ID也会被保存,然后发送到他们的主页。

  <?php

session_start();
$con=mysqli_connect("localhost", "root", "", "projectinnovations");

//Check connection
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL:" . mysqli_connect_errno();
}

if($_SERVER["REQUEST_METHOD"] == "POST") 
{
    $email = mysqli_real_escape_string($con,$_POST['email']);
    $password = mysqli_real_escape_string($con,$_POST['password']);

    $email = stripslashes($email);
    $password = stripslashes($password);
    $sql="SELECT * FROM individual_users WHERE email='$email' and password='$password'";
    $result=mysqli_query($con,$sql);

    $count=mysqli_num_rows($result);

    if ($count==1)
    {
        $_SESSION['email']= $email;
        $_SESSION['password']= $password;
        $sql1="SELECT fullname FROM individual_users WHERE email='$email' and password='$password'";
        $result1=mysqli_query($con,$sql1);
        $_SESSION['fullname']= mysqli_fetch($result1);
        $sql2="SELECT id FROM individual_users WHERE email='$email' and password='$password'";
        $result2=mysqli_query($con,$sql2);
        $_SESSION['id']= mysqli_fetch($result2);
        header("location:home.php");
    }

    else 
    {
        header("location:login.php");
    }
}
 mysqli_close($con);
?>

2 个答案:

答案 0 :(得分:0)

为了处理会话,可以将session_start();添加到脚本的顶部。

答案 1 :(得分:0)

您尚未开始会话

简单的答案是,您需要将session_start()放在脚本的顶部(以及使用会话变量的任何脚本的顶部)。

但实际上,你不需要这样做......

更好的答案是,你正在做的事情看起来像依赖全局变量一样危险,并且没有理由将用户电子邮件地址保留为全局变量。考虑再看一下您的应用程序架构,看看为什么您需要这样做。

你能做什么呢?

最好创建一个包含所需变量的User类,然后在需要访问用户数据时创建该类的实例。

如果您担心数据库拥塞,请查看memcachedAPCu以减轻负担。

其他问题

如果这是真实代码,您应该使用password_hashpassword_verify来处理登录。目前,您以明文形式存储密码,任何黑客都可以免费查看。

您还应该在查询中查看binding parameters,这样可以避免在运行查询之前考虑转义值。