zoukankan      html  css  js  c++  java
  • 在浏览器端利用API请求时间间隔模拟SEESSION过期机制

     
    • 前言,很多时侯,当我们构建一个前后端分离的h5项目
    • 用户的登录状态基于服务端下发的token(令牌),token(令牌)存储在浏览器端的cookie中
    • 而token(令牌)是否有效由服务端维护,当token(令牌)的有效时间可能很长的情况下
    • 这时,我们遇到一个需求,就是当浏览器端在用户打开页面没有操作超过一段时间(例如20分钟)
    • 用户登录状态自动失效,藉此,我们用api请求时间间隔模拟出一种登录过期的状态
    • 例如api请求已经距上次超过一段时间(20分钟),本地token强制删除
    • 用户登录状态失效,用户自动需要重新请求登录
        var cookie ={
                        get:function(c_name){
                            if(document.cookie.length>0){
                                  c_start=document.cookie.indexOf(c_name + "=")
                              if (c_start!=-1){ 
                                c_start=c_start + c_name.length+1 
                                c_end=document.cookie.indexOf(";",c_start)
                                if (c_end==-1) c_end=document.cookie.length
                                return unescape(document.cookie.substring(c_start,c_end))
                            } 
                              }
                            return ""
                        },
                        set:function(c_name,value,expiredays){
                            var exdate=new Date()
                            exdate.setDate(exdate.getDate()+expiredays)
                            document.cookie=c_name+ "=" +escape(value)+
                            ((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
                        }
                    }
    
                    var api ={
                            getJSON:function(url,data,cb){
                                debugger;
                                var ok = this.sessionOver();
                                if(!ok){
                                    //清除登录信息,token过期
                                    cookie.set("token",'');
                                }
    
                                $.getJSON(url,data,function(data){
                                    debugger;
                                    cb(data);
                                })
                            },
                            sessionOver:function(){
                                var timestamp = Date.parse(new Date());
                                var t = cookie.get("t");
                                if(t==''){
                                    cookie.set("t",timestamp,30);
                                    return true;
                                }else{
                                    var timespan= (timestamp-t)/1000;
                                    cookie.set("t",timestamp,30);
                                    if(timespan>1200){
                                        return false;
                                    }
                                    return true;
                                }
                            }
                    }
    
                    var url = 'http://cookhome.local/api/zp/jobs';
                    api.getJSON(url,{},function(data){
                        console.log(data);
                    });


  • 相关阅读:
    Java不带.classpath的svn项目下载,转成到eclipse中
    eclipse 实用快捷键(最全)
    加密算法IV的作用
    Hadoop环境常用命令
    Centos网络配置
    apache指定的网络名不再可用
    Toritoisegit记住用户名密码
    用JavaScript修改CSS属性的代码
    div 旋转
    过滤器、监听器、拦截器的区别
  • 原文地址:https://www.cnblogs.com/lianruihong/p/10838042.html
Copyright © 2011-2022 走看看