精华内容
下载资源
问答
  • iOS 利用token保持登陆状态

    千次阅读 2017-05-08 09:29:25
    而是登录时,登陆成功,从服务器接收tokentoken是服务器生成的一个字符串,唯一标识一个用户,并且会在一段时间后销毁,所以我们很久不登录APP,会要求重新登录利用一个工具类,进行token的存储、删除和读取。...

    项目里,需要在客户登陆后保持登陆状态。使用的不是存储用户名和密码,每次去模拟登陆。
    而是登录时,登陆成功,从服务器接收token,token是服务器生成的一个字符串,唯一标识一个用户,并且会在一段时间后销毁,所以我们很久不登录APP,会要求重新登录。

    利用一个工具类,进行token的存储、删除和读取。登陆成功进行存储、下一次打开APP进行读取、退出进行删除。

    如果,有refreshtoken,可以进行跟新,就不用再次登录。

    代码如下:

    
    #import "GCTokenManager.h"
    
    NSString *const TOKEN_KEY = @"token";
    
    
    @implementation GCTokenManager
    
    // 存储token
    +(void)saveToken:(GCToken *)token
    {
        NSUserDefaults *userDefaults=[NSUserDefaults standardUserDefaults];
        NSData *tokenData = [NSKeyedArchiver archivedDataWithRootObject:token];
        [userDefaults setObject:tokenData forKey:TOKEN_KEY];
        [userDefaults synchronize];
    }
    
    // 读取token
    +(GCToken *)getToken
    {
        NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
        NSData *tokenData = [userDefaults objectForKey:TOKEN_KEY];
        GCToken *token = [NSKeyedUnarchiver unarchiveObjectWithData:tokenData];
        [userDefaults synchronize];
        return token;
    }
    
    // 清空token
    +(void)cleanToken
    {
        NSUserDefaults *UserLoginState = [NSUserDefaults standardUserDefaults];
        [UserLoginState removeObjectForKey:TOKEN_KEY];
        [UserLoginState synchronize];
    }
    
    
    // 跟新token
    +(GCToken *)refreshToken
    {
        return nil;
    }

    这里的GCToken 是服务器端返回的token的模型,要根据自己项目中返回的JSON自定义。

    展开全文
  • 通常用户登录的时候,服务器根据用户名和密码在服务器数据库中校验该用户是否正确,校验正确后则可以根据用户ID和时间戳等属性加密生成一个Token,并返回给浏览器。 生成一个ticket的例子: WebUtils.saveCookie...

    Cookie是一种服务器发送给浏览器的一组数据,用于浏览器跟踪用户,并访问服务器时保持登录状态等功能。

    通常用户登录的时候,服务器根据用户名和密码在服务器数据库中校验该用户是否正确,校验正确后则可以根据用户ID和时间戳等属性加密生成一个Token,并返回给浏览器。
    生成一个ticket的例子:

    WebUtils.saveCookie(response, “ticket”, webTicket, -1, "/", null);

    这样浏览器就会得到一个cookie1060536-20170505112824351-1438248702.png

    只要这个访问回话没有关闭,所有访问服务器的请求都会带上这个cookie。

    服务器通过拦截器来校验用户的登录状态

    //伪代码

    public class PassPortIntercepter  extends HandlerInterceptorAdapter {
        public boolean preHandler(HttpServletRequest request, HttpServletResponse response) {
            //拦截请求
            String ticket = request.getParameter("ticket");
            //根据ticke解密用户的id
            long id = SessionUtil.build(ticket).getUserId();
            //再从数据库中访问是否存在这个用户
            UserInfo user = userInfoService.getUserBy(id);
            //如果不存在user,讲该请求拦截,并跳回登录页
            if(user == null) {
                return false;
            }
            return super.preHandle(request, response, handler);
        }
    }

    这种情况下,cookie如果被人窃取,则会有泄露信息的危险。

    1. 通过设置httpOnly属性,这样cookie只在http中传输,而不会被脚本窃取,但是网络拦截http请求还是会得到cookie。
    2. 在cookie中加入校验信息,这个校验信息与用户的使用环境相关,比如ip地址,计算机的物理地址等,在服务器端对校验的时候,如果校验值发生了变化,则要求重新登录。

    转载于:https://www.cnblogs.com/fishisnow/p/6812210.html

    展开全文
  • 通常用户登录的时候,服务器根据用户名和密码在服务器数据库中校验该用户是否正确,校验正确后则可以根据用户ID和时间戳等属性加密生成一个Token,并返回给浏览器。生成一个ticket的例子:WebUtils.saveCookie...

    Cookie是一种服务器发送给浏览器的一组数据,用于浏览器跟踪用户,并访问服务器时保持登录状态等功能。

    通常用户登录的时候,服务器根据用户名和密码在服务器数据库中校验该用户是否正确,校验正确后则可以根据用户ID和时间戳等属性加密生成一个Token,并返回给浏览器。

    生成一个ticket的例子:

    WebUtils.saveCookie(response, “ticket”, webTicket, -1, "/", null);

    这样浏览器就会得到一个cookie

    4a9f1ef199718f314c4fbced33334e53.png

    只要这个访问回话没有关闭,所有访问服务器的请求都会带上这个cookie。

    服务器通过拦截器来校验用户的登录状态

    //伪代码

    public class PassPortIntercepter extends HandlerInterceptorAdapter {

    public boolean preHandler(HttpServletRequest request, HttpServletResponse response) {

    //拦截请求

    String ticket = request.getParameter("ticket");

    //根据ticke解密用户的id

    long id = SessionUtil.build(ticket).getUserId();

    //再从数据库中访问是否存在这个用户

    UserInfo user = userInfoService.getUserBy(id);

    //如果不存在user,讲该请求拦截,并跳回登录页

    if(user == null) {

    return false;

    }

    return super.preHandle(request, response, handler);

    }

    }

    这种情况下,cookie如果被人窃取,则会有泄露信息的危险。

    通过设置httpOnly属性,这样cookie只在http中传输,而不会被脚本窃取,但是网络拦截http请求还是会得到cookie。

    在cookie中加入校验信息,这个校验信息与用户的使用环境相关,比如ip地址,计算机的物理地址等,在服务器端对校验的时候,如果校验值发生了变化,则要求重新登录。

    展开全文
  • 1.前后端分离后,前端登录状态保持一般采用webstorage或是cookie来保存token用户信息的方式来维持登录状态。如果webstorage或是cookie中没有token,则前端认为是没有登录,拦截到登录页面。vue中利用路由的before...

    1.前后端分离后,前端登录状态保持一般采用webstorage或是cookie来保存token或用户信息的方式来维持登录状态。如果webstorage或是cookie中没有token,则前端认为是没有登录,拦截到登录页面。vue中利用路由的beforeEach实现,可在main.js中做如下逻辑:

    // 路由判断登录 根据路由配置文件的参数
    router.beforeEach((to, from, next) => {
      if (to.matched.some(record => record.meta.requireAuth)){ // 判断该路由是否需要登录权限
    
        if (localStorage.token) { // 判断当前的token是否存在 ; 登录存入的token
          next();
        }
        else {
          console.log('需要登录');
          next({
            path: '/login',
            query: {redirect: to.fullPath} // 将跳转的路由path作为参数,登录成功后跳转到该路由
          })
        }
      }
      else {
        next();
      }
    });

    router中配置,通过meta指定路由是否需要登录校验标识

    export default new Router({
      routes: [
        {
          path: '/login',
          name: 'login',
          component: Login
        },
        {
          path: '/',
          name: 'App',
          meta:{
            requireAuth: true,
          },
          component:App,
          children:[
            {
              path: 'mycomp/xxx1',
              component: MyComp
            },
            {
              path: 'mycomp/xxx2',
              component: MyComp
            },
            {
              path: 'mycomp/xxx3',
              component: MyComp
            },
            {
              path: 'user/list',
              component: UserlIst
            }
          ]
        }
    
      ]
    })

    2.如上虽然利用localstorage实现了登录状态的校验。这里有个问题,如果用户在浏览器控制台手动往localstorage中添加一个token,然后就可以进入系统内的页面了。这是我们不希望的。如果想避免这种情况,必须依靠后端共同配合。即在上面判断localstorage中是否存在token,如果存在则把这个token发送到后台校验这个token是否正确,如果后台校验未通过则跳到登录界面

    // 路由判断登录 根据路由配置文件的参数
    router.beforeEach((to, from, next) => {
      if (to.matched.some(record => record.meta.requireAuth)){ // 判断该路由是否需要登录权限
    
        if (localStorage.token) { // 判断当前的token是否存在,存在则向后台发送校验
          let validateToken=调用后端接口校验localStorage.token;
    
              if(!validateToken){
                next({
                path: '/login',
                query: {redirect: to.fullPath} // 将跳转的路由path作为参数,登录成功后跳转到该路由
                });
              }
          next();
        }
        else {
          console.log('需要登录');
          next({
            path: '/login',
            query: {redirect: to.fullPath} // 将跳转的路由path作为参数,登录成功后跳转到该路由
          })
        }
      }
      else {
        next();
      }
    });

    3.上面2步控制了未登录时,无法访问系统内的页面。但对于页面上发起的请求并没有控制。比如在页面上有个按钮会像后台请求接口获取数据,这时后台返回token已经过期或是token校验未通过,我们希望用户被打入登录界面,进行登录。这时要用http请求的拦截器。比如vue项目中,请求使用的vue-resource,在main.js加入如下代码:

    Vue.http.interceptors.push((request, next) => {
      //为所有请求添加token头
      if(localStorage.token){
        request.headers.set('Authorization', "Bearer "+localStorage.token);
      }
    
      //后端响应回来,首先进入这个next的回调函数中
      next((response) => {
        //如果后端返回401,则认为是token验证失败,跳转到登录页面
        if(response.status == 401){
          router.push("/login")
        }
        return response
      });
    });

    注意:vue项目对router、Vue.http等进行配置时,一定要在new Vue实例之前,否则加入的逻辑不生效

    一般情况下,加1、3两步进行控制即可

    展开全文
  • 在上一篇Python接口自动化测试系列文章:Python接口自动化之cookie、...一、Token基本概念及原理1.Token作用为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。2.什么是TokenTo...
  • ​一、Token基本概念及原理1、Token作用为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。2、什么是TokenToken是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一...
  • APP与服务端保持登录状态

    千次阅读 2018-07-02 17:16:39
     为了维护app用户登录状态,我们可以利用token来实现。 客户端输入账号密码,发起登录请求,服务端在登录接口验证通过后,给客户端返回一个任意字符串,既token,生成算法可随机,token必须与用户的账户关联,如...
  • 在上一篇Python接口自动化测试系列文章:Python接口自动化之cookie、...一、Token基本概念及原理1.Token作用为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。2.什么是TokenTo...
  • app实现状态保持

    2018-05-18 16:23:00
    目前APP大都支持长登录,就是用户登录一次后,如果用户没有主动注销、清除APP缓存数据或卸载APP,就在一段时间内或一直保持登录状态。一般情况下,有以下三种方式: 利用Token实现 APP登录成功后,服务器以...
  • App登录状态维持

    2019-08-04 13:30:59
    目前APP大都支持长登录,就是用户登录一次后,如果用户没有主动注销、清除APP缓存数据或卸载APP,就在一段时间内或一直保持登录状态。一般情况下,有以下三种方式: 利用Token实现 APP登录成功后,服务器...
  • APP登录状态的维持

    2016-08-16 11:07:00
    目前APP大都支持长登录,就是用户登录一次后,如果用户没有主动注销、清除APP缓存数据或卸载APP,就在一段时间内或一直保持登录状态。 3.4.1利用Token实现 APP登录成功后,服务器以某种方式,如随机生成N位的字符...
  • APP开发实战11-APP登录状态的维持

    千次阅读 2016-05-11 22:16:23
    目前APP大都支持长登录,就是用户登录一次后,如果用户没有主动注销、清除APP缓存数据或卸载APP,就在一段时间内或一直保持登录状态。 3.4.1 利用Token实现 APP登录成功后,服务器以某种方式,如随机生成N位的字符...
  • 1为了维护app用户登录状态,我们可以利用token来实现。 2客户端输入账号密码,发起登录请求,服务端在登录接口验证通过后,给客户端返回一个任意字符串,既token,生成算法可随机,token必须与用户的账户关联
  • 2.利用token替代session实现状态保持,token是有时效性的满足退出登录,token存入redis可以解决不同服务器之间session不同步的问题,满足分布式部署 3.利用sign,前端按照约定的方式组合加密...
  • 2.利用token替代session实现状态保持,token是有时效性的满足退出登录,token存入redis可以解决不同服务器之间session不同步的问题,满足分布式部署 3.利用sign,前端按照约定的方式组合加密生成字符串来校验用户...
  • 2020-08-28

    2020-08-28 12:42:49
    1、Jmeter测试web接口时,需要用户保持登录状态能够进行相关操作 2、登录信息一般会不会带有参数,带有Bearer参数的值配置中难倒了一圈人 接下来说自己学习中的摸索过程: 问题分析: 1、根据api接口先进行登录...
  • Python Cookbook

    2013-07-31 22:33:26
    7.14 利用dtuple实现对查询结果的灵活访问 302 7.15 打印数据库游标的内容 304 7.16 适用于各种DB API模块的单参数传递风格 306 7.17 通过ADO使用Microsoft Jet 308 7.18 从Jython Servlet访问JDBC数据库 310 ...
  • 支持用户权限管理,管理员+操作员两大类,用户登录+用户退出,可以记住密码和自动登录,超过三次报错提示并关闭程序。 支持四种监控模式,设备面板监控+地图监控+表格数据监控+曲线数据监控,可自由切换,四种同步...
  • 那如果是要实现登录拦截的话,那不是只能在PathReplaceService中进行了? 网络解决办法 第一个疑问:由于我使用阿里路由,所以我看到zhi1ong大佬说:用Router跳转到这个Activity,然后带一个参数进去,比方说tab=...

空空如也

空空如也

1 2
收藏数 23
精华内容 9
关键字:

利用token保持用户登录