关于基于PHP会话的登录的问题
关于基于PHP会话的登录,我有几个问题。我使用以下教程创建了一个登录表单,该表单连接到我拥有的现有用户数据库: 我了解其中的大部分,但我只想询问一些我不了解的事情:关于基于PHP会话的登录的问题,php,session,session-state,Php,Session,Session State,关于基于PHP会话的登录,我有几个问题。我使用以下教程创建了一个登录表单,该表单连接到我拥有的现有用户数据库: 我了解其中的大部分,但我只想询问一些我不了解的事情: //Login Successful session_regenerate_id(); $member = mysql_fetch_assoc($result); $_SESSION['SESS_MEMBER_ID'] = $member['mem_id']; $_SESSION['SESS_FIRST_NAME'] = $mem
//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_成员ID”、“SESS_名字”和“SESS_姓氏”的原因——为什么会出现这种情况,以及它到底在做什么
我的第二个问题。在“home.php”中,当用户单击“注销”时,他们会被引导回index.php,并且不知何故会话被破坏。单击“注销”时,会话是如何被破坏的
第三,是否可以更改“home.php”,这样就有了一个if/else语句,比如“if logged_-in-echo”耶,你是用各种登录内容登录的,“else if not_-logged_-in-echo”抱歉,你没有登录,无法查看此页面,请转到下一页登录”。如果可能的话,我会怎么做
非常感谢是:
会话重新生成id()代码>正在设置会话ID
其他会话变量已设置(SESS_MEMBER_ID等),因此您不必一直查询数据。因此,这些变量(ID、名字和姓氏)存储在会话中。所以你可以简单地为“欢迎扎克”做
。。。此外,您还可以进行进一步的检查,以确保会话数据与该成员的数据库记录匹配,以确保它没有被欺骗
第三,你可以这样做
if(!empty($_SESSION['SESS_MEMBER_ID'])){ echo "Yay ".$_SESSION['SESS_FIRST_NAME'].", you are logged in"; }else{ echo "XX"; }
下面的代码出现在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,并且不知何故会话正在
摧毁。确切地说,会话是如何被破坏的
单击“注销”
通常这是通过重定向和会话\u销毁
完成的
第三,是否可以更改“home.php”以使
if/else语句,如“if logged\u in echo”
“耶,你已经登录了”和各种各样的登录内容
是,使用上述$\u会话:
<?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
}
?>
欢迎
对不起,你需要
噢!当您单击“注销”时,我刚刚发现了终止会话的内容-它会将您重定向到index.php,并在index.php的顶部终止上一个会话。明白了!感谢您提供了非常详细的答案!我现在明白了:)
<?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
}
?>