原创:自动登录设计及实现
很多网站都有“记住我”这样一个功能,登录时,如果点击“记住我”,则可以在指定时间内免登陆实现方法也多钟多样,以下是我的一个想法,欢迎讨论。
原理:通过登录时生成自动登录加密字符串,存入数据库。当session过期后,通过异步请求,把存如cookie的加密字符串和用户id作为参数,检查该用户,如果存在则自动进行登录操作。
User.php
public function login() { $this->user_model->set_autoload_cookies($r,$user,$u);//判断是否是点击记住用户名密码 }
User_model.php
注:
$autoload_sign是一个个常量,用户混淆加密,存入cookie的autoload_key为md5(“盐”+密码)及用户名两个变量
/** * 功能:判断是否是点击记住用户名密码 * 设置cookies */ public function set_autoload_cookies($r,$user,$u){ if(isset($r)&&$r=='1'){ $dataline = time()+2592000;//30天=3600*24*30 setcookie('uid', $user->id, $dataline , "/" ); $autoload_sign=$this->config->item('autoload_sign'); $autoload_sign_str=md5($autoload_sign.$user->password); setcookie('autoload_key', $autoload_sign_str, $dataline , "/" ); setcookie('loginname', $u, $dataline , "/" ); $data['autoload_key'] = $autoload_sign_str; }
登录操作js:
页面初始化的js方法:
//查看用户是否登录start $(function () { $.ajax({ type: "post", url: "http://" + url + "/user/islogin", dataType: "json", data: {'uid': localStorage.getItem('uid')}, async: true, beforeSend: function (request) { request.setRequestHeader("uid", localStorage.getItem('uid')); }, success: function (json) { if (json.data.type == 'true') { //用户已经登录的具体操作 }else{ //用户未登录,查询是否设置自动登录 $.ajax({ type:'post', url:'http://'+url+'/user/autoload_login', dataType:'json', data:{ 'uid':$.cookie("uid"), 'autoload_key':$.cookie("autoload_key") }, async:'false', success:function (json) { if(json.data.type == 'true'){ //自动登录成功 }else{ //自动登录异常 } }
User.php
自动登录方法
/** * 功能:通过cookie登录 */ public function autoload_login(){ $uid=$this->input->post('uid',true); $autoload_key=$this->input->post('autoload_key',true); $user = $this->user_model->findone_data_tomongodb('if_user',array('id'=>$uid,'autoload_key'=>$autoload_key)); //如果用户已登录,不去重新创建session if(!empty(unserialize($_SESSION['sessuser']))){ ajax_return(array('type'=>'has_login'),'用户已登录',1); }else{ $this->user_model->set_session($user);//写入session } if(empty($user)){ ajax_return(array('type'=>'no_user'),'无效用户',1); }else{ ajax_return(array('type'=>'true'),'操作成功',1); } }
欢迎讨论。
你的指尖,有着改变世界的力量!