我对基于PHP会话的登录有几个问题。我使用以下教程创建了一个连接到我现有用户数据库的登录表单:
http://www.sourcecodester.com/tutorials/php/4341/how-create-login-page-phpmysql.html
我理解其中的大部分内容,但我只是想查询一些我不理解的事情:
//Login Successful
session_regenerate_id();
$member = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $member['mem_id'];
$_SESSION['SESS_FIRST_NAME'] = $member['username'];
$_SESSION['SESS_LAST_NAME'] = $member['password'];
session_write_close();
header("location: home.php");
exit();
以下代码进入login_exec.php页面 - 我认为此代码是在成功登录时设置会话ID - 我是否正确?
我不明白的原因是“SESS_MEMBER_ID”,“SESS_FIRST_NAME”和“SESS_LAST_NAME” - 为什么会出现这种情况以及它在做什么呢?
我的第二个问题。在“home.php”中 - 当用户单击“注销”时,它们将被定向回index.php并以某种方式破坏会话。确切地说,当点击“注销”时会话被破坏了。
第三,是否可以更改“home.php”,以便有一个if / else语句,说“if logged_in echo”yay,你登录“有各种登录内容, “否则,如果not_logged_in echo”抱歉,您尚未登录且无法查看此页面,请转到以下页面登录“。如果有可能,我该怎么做?
非常感谢
答案 0 :(得分:3)
//Login Successful
session_regenerate_id();
$member = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $member['mem_id'];
$_SESSION['SESS_FIRST_NAME'] = $member['username'];
$_SESSION['SESS_LAST_NAME'] = $member['password'];
以下代码进入login_exec.php页面 - 我认为这样 代码是在成功登录时设置会话ID - 我是否正确?
是的,它会设置会话,并在保存之前将一些成员信息保存到会话中。这样,无需进一步查询数据库即可获得信息。此外,如果信息不存在,我们知道该用户未经过身份验证。
您还可以存储整个$member
$_SESSION['member'] = $member;
但这样做也会保存密码,并且在所有后续页面中将密码隐藏在会话中并不是一个好习惯。但是你可以这样做:
unset($member['password']); // $member is a copy of the database row, untouched.
$_SESSION['member'] = $member;
我的第二个问题。在“home.php”中 - 当用户点击“注销”时,他们 被引导回index.php并以某种方式进行会话 销毁。确切地说,当会话被破坏时 点击“退出”。
通常,这是通过重定向和session_destroy
完成的。
第三,是否可以改变“home.php”以便有一个 if / else语句就是说“if logged_in echo” “yay,您已登录”,其中包含各种登录内容
是的,使用上面的$ _SESSION:
<?php
if (!empty($_SESSION['SESS_MEMBER_ID']))
{
?>
Welcome, <?php print $_SESSION['SESS_FIRST_NAME']; ?>!
<?php
} else {
?>
Sorry, you need to <a href="login.php">LOGIN!</a>
<?php
}
?>
答案 1 :(得分:0)
是:session_regenerate_id();
正在设置您的会话ID。
设置了其他会话变量(SESS_MEMBER_ID等),因此您不必一直对数据进行查询。因此,这些变量(ID,名字和姓氏)存储在会话中。所以你可以简单地为“Welcome Zach”做<? echo "Welcome ".$_SESSION['SESS_FIRST_NAME']; ?>
...而且你可以做进一步的检查,以确保会话数据与该成员的数据库记录相匹配,以确保它没有被欺骗。
第三,你可以做到
if(!empty($_SESSION['SESS_MEMBER_ID'])){ echo "Yay ".$_SESSION['SESS_FIRST_NAME'].", you are logged in"; }else{ echo "XX"; }