《deetom》项目开发历程<六> 免登陆
需求:
用户选中10天后面登录。需每次登陆都直接抵达个人中心,为已登录状态
思路:
记录cookie
处于安全考虑,首先前段表单提交前对密码进行MD5加密
若用户选中了10天免登陆则将用户密码和加密密码存入cookie中
注意:cookie不支持存数组。
当用户下一次请求时,先分析有没有cookie,先分析有没有session,若有session(用户登录是会存session),则直接让用户登录。
若没有session,检查cookie
若发现了cookie,将用户名 密码取出来
对密码进行二次加密,请求数据库,检查,若成功,增加session 登陆成功
否则不成功。cookie失效了,或者cookie别改动,或者被冲突掉了。
一些代码:
前段加密部分
$.post("/Login/login?r=" + Math.random(),{ username : $username, password :calcMD5($password), key : "login", loginone : $loginone }, function(data, textStatus) { if($.trim(data) != ''){ alert(data); window.location.href="/UserCenter/info"; } });
设置cookie
if($loginone == 'yes'){ //保存cookie ,免登陆需求。 //密码已加密 $key = "csince_dt_user_info"; //过期时间 十天 //这里放的密码,只是进行了前段加密,后面登陆的时候需要再次加密登陆 setcookie($key,$userName."-".$_POST['password'],time()+864000); }
下次登录检查cookie部分
$cookie_userinfo = $_COOKIE['csince_dt_user_info'];
if(!empty($info)){
$this->redirect("/UserCenter/info");
}else{
//如果cookie 不为空 取出cookie中的账号密码
if(!empty($cookie_userinfo)){
$arr = explode('-',$cookie_userinfo);
$userName = $arr[0];
$passWord = $arr[1];
//进行密码二次加密
$passWord = $this->csmd5($passWord,'7rDySCWe');
//判断用户名密码是否匹配
$res = $model->where("username = '$userName' and password = '$passWord'")->getOne();
if(!empty($res)){
$session = $this->instance('Session');
$session->set("index_userInfo",$res);//存session
$this->redirect("/UserCenter/info");
}
}
}
积累知识,分享知识,学习知识。

浙公网安备 33010602011771号