Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于基于PHP会话的登录的问题_Php_Session_Session State - Fatal编程技术网

关于基于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

关于基于PHP会话的登录,我有几个问题。我使用以下教程创建了一个登录表单,该表单连接到我拥有的现有用户数据库:

我了解其中的大部分,但我只想询问一些我不了解的事情:

//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
    }
?>