zoukankan      html  css  js  c++  java
  • 网站自动登录功能的设计[转]

         网站的自动登录一直都是有利于提高用户体验的功能,如果设计不好,也非常容易泄漏用户的账户信息。

            比较常见的功能实现方案是将用户的登录信息保存在浏览器的Cookie中。看到一些设计有缺陷的网站会将用户的用户名和密码信息保存在Cookie中,这种做法是相当危险的。虽然这样的设计比较简单,功能比较容易实现,但是却大大提高了泄露用户账户信息的几率,即使保存的用户密码等信息都是经过加密的,但也是不可取的,毕竟现在弱一点的密码加密后也是可以解密的。

            当然自动登录的功能设计必须要在浏览器的Cookie中保留账户的登录凭证(token),这个登录凭证是被当作用户登录的登录钥匙。用户在登录时,凭借浏览器发送的token与服务器端保存的token做比较,若2个token一致,则通过验证,若不一致,则验证失败。

            

            token的产生最好具有一定的随机性,可以加入日期,随机数等等,然后通过一些不可逆的算法加密,如:

    1
    String token = Utils.MD5(user.getUsername() + System.currentTimeMillis());

            样token就不会泄露用户的信息,安全性上得到了保证。token产生后,先将其保存到数据库中,用于以后的验证,接着将其发送给浏览器,保存在客户端的Cookie中。参考代码如下,这里Cookie的有效设置为10天,也就说10后,这个Cookie就会失效:

    1
    2
    3
    4
    Cookie cookieToken = new Cookie("token", token);
    cookieToken.setMaxAge(10 * 24 * 60 * 60);   // 10 days
    cookieToken.setPath("/");
    response.addCookie(cookieToken);

            

            当用户登录我们的网站后,到浏览器中查看Cookie信息,就会发现有token的记录:


            此时token的值就是上面代码中经过MD5加密的值,作用域名为我们的网站域名(这里是测试环境,所以此处的域名是localhost),有效路径为/,即根目录,有效期到2013年12月27号。

            根据浏览器管理Cookie的机制,当用户退出登录后再次浏览我们的网站时,浏览器在向服务器发送URL的同时,依旧会带上Cookie的信息,如下图中所示:


            下面是在Spring MVC框架下用户请求登录页面的实现代码(此处的功能应该加在检测是否登录的Filter中,因为用户的每次请求都会验证用户是否登录,若未登录,即可在验证token,通过token来实现自动登录):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String login(@CookieValue(value="token", required=false) String token) {
        if (!StringUtils.isEmpty(token)) {
            if (this.userService.checkToken(token)) {
                updateCookie();             // 刷新token
                createSession();                // 创建Session
                return "redirect:/user/list";
            }
        }
        return "admin/login";
             
    }

            浏览器在请求登录界面的时候,会带上token,这时候服务器端的程序会拿到这个token,如果token存在且不为空,会将它与存放在数据库中的token进行比较,若一致,则通过验证,登录成功;若不一致,则登录失败。

            验证成功: 更新token,也就说一个token只能登录验证一次,验证成功后,就会更换新的token

            验证失败: 跳转到登录页面 

            对于大部分的网站来说,这样的设计基本上能够保证用户的账户安全,若要求安全性再高一点,可以同时加入对访问ip的验证,这样验证机制就是token + ip双重验。不足之处就是ip获取的准确性不够,若用户之前使用了代理访问,那么前后ip就出现了不一致,无法自动登录。

  • 相关阅读:
    R语言学习笔记:向量化
    R语言笔记:快速入门
    再分析 返回值加引用&,const
    matlab 怎么保存plot的图 到指定文件夹
    不要在头文件中使用 using namespace std;
    散列表 (Hash table,也叫哈希表)
    重载操作符 operator overloading 学习笔记
    转 XMLHttpRequest().readyState的五种状态详解
    值得回味的基础知识理解加深
    完美解决fixed 水平居中问题
  • 原文地址:https://www.cnblogs.com/jessica2015/p/4660757.html
Copyright © 2011-2022 走看看