我应该为登录用户设置大量SESSION变量吗?

时间:2014-05-27 23:45:13

标签: php mysql session

我有一个login.php并在用户的电子邮件和密码匹配时创建一个会话,然后我会创建SESSION varibles以供进一步使用

<?php

require_once '../php_includes/db_connects.php';
require_once '../php_includes/core_includes.php';


if(isset($_POST['email']) && isset($_POST['pasw'])){
    $e=$mysqli->real_escape_string(htmlentities($_POST['email']));

 $p=md5($mysqli->real_escape_string(htmlentities($_POST['pasw'])));

    $result=$mysqli->query("SELECT * FROM `user_info` WHERE `email`='$e' AND `password`='$p' LIMIT 1");
     $result->num_rows;
    if($result->num_rows ==1){
        while($obj=$result->fetch_object())
         {
            $_SESSION['id']=$obj->id;
            $_SESSION['firstname']=$obj->firstname;
            $_SESSION['lastname']=$obj->lastname;
            $_SESSION['email']=$obj->email;
            $_SESSION['college']=$obj->college;
            $_SESSION['profile_pic']=$obj->profile_pic;

        }


    }


}

?>

保留大量的会话变量来保存登录用户的基本信息,或者每次使用它时只从数据库中检索这些信息是很好的吗?就像我需要使用firstname 10次然后我必须从数据库中获取10次信息?

3 个答案:

答案 0 :(得分:1)

我喜欢使用$_SESSION来省去一遍又一遍地抽取数据的麻烦。由于您必须在登录时提取用户记录,因此最好将其拉入其他数据,然后将其粘贴到会话变量中。

但是,我不会使用while来登录。我希望你的系统足够智能,只允许对一组给定的凭证进行一次身份验证。

答案 1 :(得分:0)

我认为如果用户更改了用户名或电子邮件地址,您仍会在会话中获得旧信息。 所以我觉得每次使用它们都会更好。

答案 2 :(得分:0)

在会议和性能方面,基本上只有一个重要的步骤。

主要是使用会话。 PHP的会话是为了不允许执行并行请求而构建的,因此在使用大量AJAX请求的站点上使用PHP会话时会产生明显的影响。如果您必须将用户登录到站点,则无法避免使用类似会话的内容,但是您应该知道如何使用session_write_close()尽早释放会话锁。

影响较小的是,您拥有的会话数据越多,读取和写入的速度就越慢。不要滥用会话作为缓存,即不要向其写入大量数据。巨大的将是序列化的100 KB和更多的数据。您的一小部分用户信息根本不会影响性能。

相关问题