首页 » PHP和MySQL Web开发(原书第4版) » PHP和MySQL Web开发(原书第4版)全文在线阅读

《PHP和MySQL Web开发(原书第4版)》29.5 登录与登出

关灯直达底部

当用户载入index.php页面时,将看到如图29-2所示的输出页面。

图 29-2 Warm Mail系统的登录页面询问用户名与密码

这是该应用程序的默认动作。如果没有选择$action动作,并且也没有提供登录细节,将执行代码的下面部分。

在预处理阶段,PHP将首先执行如下所示的代码:

include('include_fns.php');

session_start;

以上代码将开始一个会话,该会话可以用来保存会话变量$auth_user和$selected_account,这两个变量后面会用到。

在其他应用程序中,我们创建了短的变量名称。从第1章“PHP快速入门教程”开始,我们就在与每一个表单相关的脚本中使用短的变量名称,因此除了action变量外,我们不需要再提这一点。根据应用程序功能模块的不同,它可能是一个GET或POST变量。因此,可以从$_REQUEST数组获得这个变量。对于account变量也是如此,因此通常它可以通过GET进行访问,但是当要删除一个账户时,需要通过POST进行访问。

为了在定制用户界面时减少工作量,可以使用一个数组来控制出现在工具条中的按钮。我们声明了一个如下所示的空数组:

$buttons=array;

并将按钮设置为我们希望在页面看到的那些按钮:

$buttons[0]='view-mailbox';

$buttons[1]='new-message';

$buttons[2]='account-setup';

如果用户是以管理员身份登录的,还需要在这个数组中添加更多按钮。

在标题阶段,我们打印了一个普通的vanilla标题:

do_html_header($_SESSION['auth_user'],"Warm Mail",

$_SESSION['selected_account']);

...

display_toolbar($buttons);

这些代码将打印标题和标题头,然后可以看到如图29-2所示的按钮工具条。这些函数可以在output_fns.php函数库中找到,但由于可以轻易地在图中看出他们的运行结果,因此在这里,我们不再详细介绍它们。

现在,我们来了解代码的主体部分:

if(!check_auth_user){

echo"<p>You need to log in";

if(($action)&&($action!='log-out')){

echo"to go to".format_action($action);

}

echo".</p>";

display_login_form($action);

}

check_auth_user函数来自于user_auth_fns.php库。我们已经在前面的某些项目中使用过与此非常相似的代码——它检查用户是否登录。在这里,作为一种情况,如果用户没有登录,我们将显示一个登录表单,如图29-2所示。我们使用output_fns.php中的display_login_form函数绘制该表单。

如果用户正确填写了表单并点击"Log In"按钮,将看到如图29-3所示的输出页面。

图 29-3 在成功登录后,用户可以开始使用该应用程序

在这个脚本的执行过程中,我们将触发代码的不同部分。登录表单有两个字段,$username和$password。如果填好了这两个字段,如下所示的预处理代码将会被触发:

if($username||$password){

if(login($username,$passwd)){

$status.="<p style=/"padding-bottom:100px/">Logged in successfully.</p>";

$_SESSION['auth_user']=$username;

if(number_of_accounts($_SESSION['auth_user'])==1){

$accounts=get_account_list($_SESSION['auth_user']);

$_SESSION['selected_account']=$accounts[0];

}

}else{

$status.="<p style=/"padding-bottom:100px/">Sorry,we could not log you

in with that username and password.</p>";

}

}

可以看到,以上代码将调用login函数,该函数与第27章“建立用户身份验证机制和个性化设置”和第27章“创建一个购物车”中的相似。如果一切正常,我们将在会话变量auth_user中注册该用户名。

除了设置当用户没有登录时所看到的按钮外,也可以添加另外的按钮让用户登出,如下所示:

if(check_auth_user){

$buttons[4]='log-out';

}

可以在图29-3中看到这个"Log Out"按钮。

在“标题”阶段,我们再次显示了标题和按钮。在正文阶段,显示了以前设置的状态信息:

echo$status;

接下来,我们将打印页脚并等待用户的下一步操作。