• 《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");
                    }
                }
            }
    
    积累知识,分享知识,学习知识。
  • 相关阅读:
    转 : jmeter分布式测试的坑
    Node.js 事件循环
    ubuntu 16.04 安装nodejs
    java中native的用法
    分布式与集群的概念区别
    IntegerToBinaryString
    Mysql InnoDB事务
    浅析Mysql InnoDB存储引擎事务原理
    Mysql数据库事务的隔离级别和锁的实现原理分析
    MySQL中MyISAM和InnoDB的区别
  • 原文地址:https://www.cnblogs.com/bin-pureLife/p/3831450.html
Copyright © 2020-2023  润新知