【发布时间】:2015-10-02 00:30:39
【问题描述】:
我正在查看我的注册和登录表单,困扰我的是我为每个表单的各个变量定义了几个会话。这就是我要说的:
我的注册表的一部分:
$pass = md5($pass);
$regSQLI = "INSERT INTO users (id, email, birth_date, first_name, last_name, password, sign_up_date, activated) VALUES ('','$em','$bday','$fn','$ln','$pass','$sud','0')";
$regQuery = mysqli_query($con, $regSQLI);
//variables that will be passed over from the register fields to forthcoming sessions
$_SESSION["email_login"] = $em;
$_SESSION["first_name"] = $fn;
$_SESSION["last_name"] = $ln;
我的登录表单的一部分:
if ($userCount == 1) { //if the search finds a matching record of the login input form
while( $row = mysqli_fetch_assoc($sqli)) { // use fetch_assoc
$id = $row["id"];
}
$_SESSION["email_login"] = $email_login;
$_SESSION["first_name"] = $fn;
$_SESSION["last_name"] = $ln;
header("location: home.php");
exit();
}
else {
echo '<div id="regerrormsg">Login information is invalid. </div>';
}
}
一切正常,但我想知道是否可以通过清理必须调用多个会话来节省一些性能。我有多个会话的原因是因为即使用户将使用他们的电子邮件注册和登录,系统也会通过他们的名字来寻址/回显他们:
<?php
echo $_SESSION["first_name"]." ".$_SESSION["last_name"].".";
?>
有没有一种方法可以让我只使用一个会话变量(可能是电子邮件)作为验证器,并从数据库中检索与相关会话变量对应的数据?那会更干净更顺畅吗?谢谢。
【问题讨论】:
-
没有区别。客户端仍然只得到一个 cookie。你这样做的方式很好。引导,用户可能有未同步的信息,因此在这种情况下,您可能只想在会话中保留
users.id并从中提取用户数据。 -
您没有调用“多个会话”。这是一个包含多个数据位的单个会话。这些都没有到达客户
-
@DaveChen 非常感谢。不过,出于好奇,是什么导致用户拥有不同步的信息?
-
@MarcB 感谢您让我放心!
-
假设用户更改了他们的用户名(或管理员这样做),那么该会话的用户将只能看到他们的旧用户名。