2012-11-06 41 views
0

我有几个关于基于PHP会话登录的问题。我已经使用了下面的教程来创建连接到我有一个现有的用户数据库登录表单:关于基于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语句表示“如果logged_in回声”yay,您登录了“与各种登录内容,“否则,如果not_logged_in回声”对不起,您没有登录,无法查看此页面,请转到下一页登录“。如果可能的话,我该怎么做?

非常感谢

+0

哦,我只是发现当您单击注销什么是终止会话 - 这将您重定向到的index.php和在顶部index.php,它终止了以前的sess离子。得到那部分! –

回答

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”所以,有一个 如果地方/ else语句,说什么“如果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 
    } 
?> 
+0

谢谢你的非常详细的答案!我现在知道了 :) –

0

是:session_regenerate_id();是设置你的会话ID。

其他会话变量被设置(SESS_MEMBER_ID等),所以你不必一直查询数据。所以这些变量(ID,名字和姓氏)被存储在会话中。因此,您可以简单地为“欢迎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"; }