网站自动登录功能的设计
来源:互联网 发布:hadoop大数据平台架构 编辑:程序博客网 时间:2024/05/16 19:10
网站的自动登录一直都是有利于提高用户体验的功能,如果设计不好,也非常容易泄漏用户的账户信息。
比较常见的功能实现方案是将用户的登录信息保存在浏览器的Cookie中。看到一些设计有缺陷的网站会将用户的用户名和密码信息保存在Cookie中,这种做法是相当危险的。虽然这样的设计比较简单,功能比较容易实现,但是却大大提高了泄露用户账户信息的几率,即使保存的用户密码等信息都是经过加密的,但也是不可取的,毕竟现在弱一点的密码加密后也是可以解密的。
当然自动登录的功能设计必须要在浏览器的Cookie中保留账户的登录凭证(token),这个登录凭证是被当作用户登录的登录钥匙。用户在登录时,凭借浏览器发送的token与服务器端保存的token做比较,若2个token一致,则通过验证,若不一致,则验证失败。
token的产生最好具有一定的随机性,可以加入日期,随机数等等,然后通过一些不可逆的算法加密,如:
String token = Utils.MD5(user.getUsername() + System.currentTimeMillis());
样token就不会泄露用户的信息,安全性上得到了保证。token产生后,先将其保存到数据库中,用于以后的验证,接着将其发送给浏览器,保存在客户端的Cookie中。参考代码如下,这里Cookie的有效设置为10天,也就说10后,这个Cookie就会失效:
Cookie cookieToken = new Cookie("token", token);cookieToken.setMaxAge(10 * 24 * 60 * 60); // 10 dayscookieToken.setPath("/");response.addCookie(cookieToken);
当用户登录我们的网站后,到浏览器中查看Cookie信息,就会发现有token的记录:
此时token的值就是上面代码中经过MD5加密的值,作用域名为我们的网站域名(这里是测试环境,所以此处的域名是localhost),有效路径为/,即根目录,有效期到2013年12月27号。
根据浏览器管理Cookie的机制,当用户退出登录后再次浏览我们的网站时,浏览器在向服务器发送URL的同时,依旧会带上Cookie的信息,如下图中所示:
下面是在Spring MVC框架下用户请求登录页面的实现代码(此处的功能应该加在检测是否登录的Filter中,因为用户的每次请求都会验证用户是否登录,若未登录,即可在验证token,通过token来实现自动登录):
@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();// 刷新tokencreateSession();// 创建Sessionreturn "redirect:/user/list";}}return "admin/login";}
浏览器在请求登录界面的时候,会带上token,这时候服务器端的程序会拿到这个token,如果token存在且不为空,会将它与存放在数据库中的token进行比较,若一致,则通过验证,登录成功;若不一致,则登录失败。
验证成功: 更新token,也就说一个token只能登录验证一次,验证成功后,就会更换新的token
验证失败: 跳转到登录页面
对于大部分的网站来说,这样的设计基本上能够保证用户的账户安全,若要求安全性再高一点,可以同时加入对访问ip的验证,这样验证机制就是token + ip双重验。不足之处就是ip获取的准确性不够,若用户之前使用了代理访问,那么前后ip就出现了不一致,无法自动登录。
- 网站自动登录功能的设计
- 网站自动登录功能的设计
- 网站自动登录功能(安全-代码简洁)的设计
- 关于手机网站自动登录的功能
- 网站自动登录功能实现
- 网站的下次自动登录功能的实现方法
- 网站的下次自动登录功能的实现方法
- 网站的下次自动登录功能的实现方法
- 实现各大网站的自动登录等**功能
- 网站的自动登录
- 网站的自动登录
- 自动登录功能的实现
- 实现网站的自动登录
- 自动登录的设计思路
- Java网站中的自动登录功能如何实现 Session Cookie
- 网站1周内自动登录功能实现
- week10-实现网站的登录、注册功能
- 自动登录功能的java实现
- 数据结构之队列12阵列队列
- 1.10 双线程高效下载
- QT中PRO文件写法的详细介绍,很有用,很重要! .
- 加州理工学院公开课:机器学习与数据挖掘_神经网络(第十课)
- php函数
- 网站自动登录功能的设计
- HDU 2089【数位DP】
- Effective C++ 34
- codechef Fun with Rotation
- 一个开始
- KMP next[]小贴士
- hdu 2899 hdu 3400 三分/几何
- 小白学c++之effective c++条款12实现代码
- Win32 下 使用CMarkup类遇到的问题