首先,方法论基本都知道,不就是对session(请允许我忽略cookie)的操作么?问题是那些细节问题。
1_改版后3.1之前的教程基本阵亡,session的存取简单了:
存:
session('username',$username);
取:session('username');
2_检查是否设置了某些session:session('?username')
---------------------------以下是正文---------------------------首先是form表单的提交,
login.html:
<form action="" method="post">
<input type="text" name="account" class="input" value="" id="loginUsername" placeholder="用户名">
<input type="password" name="passwd" class="input erro" value="" id="loginPwd" placeholder="密码">
</form>
action为空就是提交到本页面或默认页面,此处为本页面UserController.class.php:
<? php
namespace Home\Controller;
use User\Api\UserApi;//有关注册登录验证的模块,此处不予展示了
class UserController extends HomeController {
public function index(){
}
...
...
/* 登录页面 */
public function login($username = '', $password = '', $verify = ''){
if(IS_POST){ //登录验证
/* 调用UC登录接口登录 */
$username = I('post.account');
$password = I('post.passwd');
$user = new UserApi;
$uid = $user->login($username, $password);//获取数据库中保存的用户ID
if(0 < $uid){ //UC登录成功
/* 登录用户 */
$Member = D('Member');
if($Member->login($uid)){ //登录用户
//将用户名存入session
session('username',$username);
//TODO:跳转到登录前页面
$this->success('登录成功!',U('/Index/index'));
} else {
$this->error($Member->getError());
}
} else { //登录失败
switch($uid) {
case -1: $error = '用户不存在或被禁用!'; break; //系统级别禁用
case -2: $error = '密码错误!'; break;
default: $error = '未知错误!'; break; // 0-接口参数错误(调试阶段使用)
}
$this->error($error);
}
} else { //显示登录表单
$this->display();
}
}
...
...
分析:当点击登陆时,会调用login(),检测是否接收到了表单提交的数据(上面的action为空就是提交到这儿了),因为还未提交表单,故False,执行$this->display();显示登录界面;当提交表单后,又一次执行login(),检测到数据,调用I()取值,然后判断是否存在此用户及密码是否正确,如果都正确将用户名存入session
然后就跳转到首页:
<include file="Public/n_head"/>
<body>
...
...
首页用了include,导致IndexController.class.php无法直接用$this->assign();赋值,给判断用户是否登录带来了麻烦,所以...n_head.html:
...
...
<php>if (session('?username') != null){</php>
<div class="htitle_user fl"> <b>{$Think.session.username}</b> 您好,欢迎! <a href="/user/logout">注销</a> </div>
<php>} else {</php>
<div class="htitle_user fl"> 您好,欢迎!请<a href="/user/login">登录</a><span>或</span><a href="/user/register">免费注册</a> </div>
<php>}</php>
...
...
接着是注销:UserController.class.php:
...
...
/* 退出登录 */
public function logout(){
if(is_login()){
//D('Member')->logout();
session('username',null);
session('[destroy]');
$this->success('退出成功!', U('/Index/index'));
} else {
$this->redirect('/Index/index');
}
}
...
...
最佳答案
