1

我有几个关于基于 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,you are logged in”,其中包含各种登录内容,“else if not_logged_in echo "对不起,您没有登录,无法查看该页面,请到以下页面登录"。如果有可能,我会怎么做?

非常感谢

4

2 回答 2

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, you are logged in”的各种登录内容

是的,使用上面的 $_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
    }
?>
于 2012-11-06T17:54:27.047 回答
0

是:session_regenerate_id();正在设置您的会话 ID。

设置了其他会话变量(SESS_MEMBER_ID 等),因此您不必一直查询数据。所以这些变量(ID、名字和姓氏)存储在会话中。所以你可以简单地<? echo "Welcome ".$_SESSION['SESS_FIRST_NAME']; ?>为“Welcome Zach”做...另外你可以做进一步的检查以确保会话数据与该成员的数据库记录相匹配,以确保它没有被欺骗。

第三,你可以做

if(!empty($_SESSION['SESS_MEMBER_ID'])){ echo "Yay ".$_SESSION['SESS_FIRST_NAME'].", you are logged in"; }else{ echo "XX"; }
于 2012-11-06T17:52:33.900 回答