如何设计相对安全的cookie自动登录系统
很多网站登录的时候,都会有一个“记住我”功能,用户可以在限定时间段内免登录, 比如豆瓣、人人、新浪微博等都有这种设计。这种技术其实就是基于 cookie的自动登录, 用户登录的时候会把需要验证的token写到cookie里面,当用户session失效的时候, token会通过cookie 发送给服务器端,服务器端解析token判断是否已经登录; 这里面的token如何设计是关键,到底存什么数据才能保证系统的安全性呢? 有些新手可能会想,把用户id和password直接md5加密存到cookie,这样做是最糟糕的设计, 用户的敏感信息直接暴露出来,黑客可以伪造别人的id进行尝试性登录, 可以想象黑客知道了admin账号的id,试过几千几万次,密码和加密算法很可能破解出来。 token要相对安全,不应该是简单的用户名和密码md5加密, 用户密码其实完全可以不用存进去,分两步来做: 1)token 是一些信息的组合,用户id+用户名+expires过期时间+ip地址+salt, 具体加密算法最好自己写,不能使是常见的加密函数(md5), 当然这 个加密函数必须可逆,这个token我们同时要保存在用户表数据库里面, set cookie的时候记得http only; 2) 服务器端拿到cookie之后,进行逆解析, 这个时候我们要验证如下信息:cookie是否过期、ip地址是否发生变化、用户id和用户名是否存在; 用户 存在之后,我们再拿这个token跟第一步存在数据库中的token进行比较, 看是否相等,如果不等说明token已经过期,这样做可保证每次用户登录之 后token值都不一样, 之前用过的token都会失效;

如何设计相对安全的cookie自动登录系统的更多相关文章
- cookie自动登录的实现
cookie自动登录是指把用户登录的信息按期限(自定)保存在客户端,当用户请求登录时判断客户端用没有cookie对象,有的话填充值,否则登录界面的输入框为空,不进行填充. 登录界面 ...
- Centos自动登录系统并自动打开VNC Server
系统自动登录 修改配置文件 sudo vim /etc/gdm/custom.conf 增加配置 [daemon] AutomaticLogin=spark AutomaticLoginEnable= ...
- jsp使用cookie自动登录
Login.jsp <%@ page language="java" import="java.util.*" pageEncoding="ut ...
- 8、Django实战第8天:session和cookie自动登录机制
因为http是无状态协议,因此,并不会记录用户的登录状态.在早期,是直接把用户名和密码等信息存储在浏览器的cookie来实现记录用户密码登录. 但是这样存在安全隐患,只要别人登录你的电脑cookie信 ...
- 爬虫模拟cookie自动登录(人人网自动登录)
什么是cookie? 在网站中,HTTP请求时无状态的,也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是谁,cookie的出现就是为了解决这个问题,第一次登陆后服 ...
- session和cookie自动登录机制
cookie的存储 cookie是浏览器支持的一种本地存储方式.以dict,键值对方式存储. {"sessionkey": "123"} 浏览器会自动对于它进行 ...
- Java设计给小学生的自动出题系统
系统要求: 1.自动出题,涉及加减乘除四则运算 2.运算为两位数之间 3.减法不能出现负数 4.乘法结果不超过100 5.除法必须整除 6.用户决定出题量 7.用户决定几道题一换行 8.题目不允许重复 ...
- 5.servlet cookie自动登录的实例
1.要建的文档,.java用servlet创建 2.建一张登陆表格 index.jsp <%@ page language="java" import="java. ...
- asp.net 不用控件,自动登录(用于和其他系统对接的时候,自动登录系统,用户体验好)
if (System.Web.Security.Membership.ValidateUser("admin", "123456")) { //这句话很重要,他 ...
随机推荐
- React入门---组件-4
组件:网页可以分为多个模块,比如头部,底部,分享等各种模块,这些模块在其他页面也可能会用到,我们把这些分开,每一个模块当作一个组件,进行复用. 接下来直接以头部 header作为一个组件来进行demo ...
- python 基本模块
time & datetime模块 import timeimport datetime# ## # print("ss")# #time.sleep(5)# # prin ...
- 深入tornado中的TCPServer
1 梳理: 应用层的下一层是传输层,而http协议一般是使用tcp的,所以实现tcp的重要性就不言而喻. 由于tornado中实现了ioloop这个反应器以及iostream这个对连接的异步读写,所以 ...
- MindNode for mac 思维导图
绘制思维导图 下载地址 链接: https://pan.baidu.com/s/1o7NBzmU 密码: mu3f
- 省市联动_简单的Demo,适用于各种二级菜单联动
最近搞了一个功能,是查询页面需要用到二级菜单联动,获取到选中的属性value传入到后台. 平常都是用AJAX或者JQuery ,通过XML或者JSON的方式,这样的话需要调用数据库,像典型得到省市联动 ...
- redis入门指南-附录B
- jmeter 环境部署、数据库设置、分布式设置、多网卡配置等随笔
<!-- linux系统修改系统环境变量 系统语言-->[root@web-249 ~]# env|grep LANGLANG=zh_CN.UTF-8[root@web-249 ~]# ...
- opencv基础到进阶(2)
本文为系列文章的第2篇,主要讲解对图像的像素的操作方法. 2.1存取像素值 为了存取矩阵元素,需要指定元素所在的行和列,程序会返回相应的元素.单通道图像返回单个数值,多通道图像,返回的则是一组向量(V ...
- sqlserver删除重复的数据
分享链接: http://blog.csdn.net/s630730701/article/details/52033018 http://blog.csdn.net/anya/article/det ...
- Ch1. Intro to Programming
1-1 Input three integers and output the average number. Keep three decimal places. #include<stdi ...