如何设计相对安全的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都会失效;

相关内容推荐