zoukankan      html  css  js  c++  java
  • cookie小栗子-实现简单的身份验证

    关于Cookie

    Cookie是一种能够让网站Web服务器把少量数据储存到客户端的硬盘或内存里,或是从客户端的硬盘里读取数据的一种技术。

    用来保存客户浏览器请求服务器页面的请求信息,可以在HTTP返回体里,通过设置Set-Cookie来告诉浏览器端所要存储的cookie

    cookie所有浏览器都识别,并且会缓存到浏览器,虽然cookie保存在浏览器端,但是一般是在服务器端设置的

    cookie是以键值对的形式保存(key=value),各个cookie之间一般是以“;”分隔

    要表示唯一的一个cookie值需要加 name、domain、path

    cookie是不可跨域的,他会根据域名来区分是向哪个服务器发送数据

    cookie的默认生命周期是当浏览器关闭以后生命就结束,通过expires可以设置生命周期

    let d = new Date();
    d.setDate(d.getDate()+1);
    d.setMinutes(d.getMinutes() + 5);
    document.cookie = 'name = xh;' +'expires='+d;

    设置cookie

    document.cookie = 'name'+username

    设置cookie都会调用tostring,可以通过JSON.parse转一下来解决

    对于前端来说,种cookie就是给document设置了一个叫做cookie自定义的属性,这个属性能被所有浏览器识别并缓存在浏览器中

    function setCookie(name,value) 
    { 
        var Days = 30; 
        var exp = new Date(); 
        exp.setTime(exp.getTime() + Days*24*60*60*1000); 
        document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString(); 
    } 

    读取cookie

    document.cookie

    返回结果会把域中所有cookie都显示出来key=val;每个之间以分号 空格来分

    function getCookie(name) 
    { 
        var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
     
        if(arr=document.cookie.match(reg))
     
            return unescape(arr[2]); 
        else 
            return null; 
    } 

    删除cookie

    使用JavaScript清理Cookie找到该Cookie对应的Name对应的值,然后设置其为过期

    function delCookie(name) 
    { 
        var exp = new Date(); 
        exp.setTime(exp.getTime() - 1); 
        var cval=getCookie(name); 
        if(cval!=null) 
            document.cookie= name + "="+cval+";expires="+exp.toGMTString(); 
    } 

    cookie与session之间的区别:

    cookie保存在浏览器端,session保存在服务器端

    单个cookie保存的数据不能超过4kb,session大小没有限制

    cookie的应用场景:

    猜你喜欢、身份验证、每日推荐、免登录等等

    下面是一个简单的身份验证的小栗子

      <div id="login">
                用户名:<input type="text" id="user">
                密码:<input type="password" id="pw">
                <br/>
                <label>
                    十天免登录:
                        <input type="checkbox" id="cd">
                </label>
                <button id="btn">登录</button>
                <button id="btn2">注册</button>
        </div>
        <div id="box" style="display: none">
            <p id="txt"></p>
            <button id="up">退出</button>
        </div>
      let sql = [
            {
                uv:'虾米',
                pv:123456
            },
            {
                uv:'网易云',
                pv:123456
            },
            {
                uv:'QQ',
                pv:123456
            },
            {
                uv:'酷狗',
                pv:123456
            }
        ];
        
        if(getCookie('user')){
            login.style.display = 'none';
            box.style.display = 'block';
            txt.innerHTML = '欢迎'+getCookie('user')+'回来!';
        }
    
        up.onclick = function(){
            rmCookie('user',getCookie('user'));
            window.location.reload();
        }
    
        
        btn.onclick = function(){
            let uv = user.value;
            let pv = pw.value;
    
            let obj = sql.find(e=>e.uv == uv);
            //有数据
            if(obj){
                if(obj.pv == pv){
                    alert('登录成功');
                    if(cd.checked){
                        setCookie('user',obj.uv,{name:'date',time:10})
                    }else{
                        setCookie('user',obj.uv);
                    }
                    window.location.reload();
                }else{
                    alert('用户名或密码错误');
                }
            }else{
                alert('此用户不存在');
            }   
            console.log(obj);
        }
    
       //设置cookie
        function getCookie(key){
            let c = document.cookie.split('; ');
            let on = false;
            for(let i of c){
                let arr = i.split('=');
                if(arr[0] === key){
                    on = true;
                    return arr[1];
                }
            }
            if(!on)return null;
        }
        //获取cookie
        function setCookie(key,val,obj={}){
            let d = new Date();
            let {name,time} = obj;
            switch(name){
                case 'date' :
                    d.setDate(d.getDate() + time);
                break;
                case 'minu' :
                    d.setMinutes(d.getMinutes() + time);
                break;
                case 'hour' :
                    d.setHours(d.getHours() + time);
                break;
            }
            document.cookie = key +'='+ JSON.stringify(val) + (obj.time?'; expires='+ d:'');
        }
      //删除cookie
        function rmCookie(key,val){
            setCookie(key,val,{name:'date',time:-1});
        }
  • 相关阅读:
    python中的os模块
    python基础之正则表达式
    可以结合react的ui组件
    清除文件里的中文字
    阿里云docker
    Java开源BI系统介绍(转)
    miniui datepicker 二次加工
    笔试网站
    webpack ,gulp/grunt的介绍
    百度app测试服务
  • 原文地址:https://www.cnblogs.com/theblogs/p/10617515.html
Copyright © 2011-2022 走看看