网站自动登录功能的设计

我相信有很多IT者都会遇到公司要求网站可以实现自动登录,那什么是自动登录呢?

  所谓自动登陆就是当用户第一次访问网站时,输入用户名和密码,然后勾选了自动登陆复选框,进入首页后,点击退出登陆,关闭网页,再次打开同样的网站,则无需再次输入账号密码,直接进入首页,这种交互方式就是“自动登录”,这是非常好的用户体验,但是具体怎么实现这些功能呢,下面给大家介绍一下我的理解和实现方式。

  大家用过京东和淘宝的想必都知道,登陆京东后,发现账户信息已经显示在首页,可以直接进行购物和付款,这种体验就是我们要追求的方式。

 

为何浏览器打开,网站就会自动登陆呢,那说明打开网站的时候,浏览器向服务器端发送了一个凭证(Token也可叫钥匙),告诉服务器,我是你的真实用户,可放心开门,既然浏览器端需要提供凭证,那我们肯定会想到Cookie,只有Cookie才能在客户端永久保存,客户端从Cookie中提取信息后,服务器端识别后才能知道真伪,那说明服务器端是需要核验的。

到此,我们的思路已经出来了,要实现自动登陆:

1.用户登陆网站时,选择“N周内免登录”。

2.用户登陆成功后需要在浏览器端保存Cookie信息,同时服务器端数据库中也需要记录同样的信息。

3.当用户访问时,读取客户端中cookie信息,到服务器端数据库进行核验,信息一致时直接获取用户信息保存session,跳转到首页。

 

以上是我帮助大家分析的思路,那下面我们就会具体去讲这些方案。

既然是cookie实现,那么cookie一定可以被伪造的,所以上述的方案有以下安全隐患:

1.修改用户名,这样就可以随便用其他人的账号登录了;

2.修改cookie的有效期,这样当别人拿到你的电脑的时候,即使已经过了cookie的有效期,仍然可以登陆。

既然我们都知道Cookie是有安全隐患的,但是我们不用又不行,因此,我们能做的就是降低风险:

1.通过将cookie中保存的信息进行加密处理,用户登陆成功以后,将时间戳和随机数合并通过MD5加密处理形成Token。

  String token = Utils.MD5(System.currentTimeMillis()+Math.Rand(0,9999999));

  当然,也可以通过用户名+系统时间生产Token或者将sessionId加密生产Token也可以。

2.将用户ID(uid或者userName)和有效时间(1个月)以及Token保存在cookie中,同时记录到数据库表中(Remember_Key)。

3.用户访问网站时,后台读取Cookie,获取uid和Token,去数据库对比,如果都存在,且在有效期内,则通过uid直接获取用户信息并保存session,直接跳转到首页。

前端可对此进行处理,获取到后台返回的数据后,展示用户名以及头像信息等。

4.后台需要做过滤器,过滤网站的所有页面,每当打开页面时,首先判断是否登陆,如果已经登陆则跳过,如果未登陆,需要先读取Cookie,判断是否匹配,如果匹配则跳过登陆,直接获取用户信息,否则跳转到登陆页面。

后台表设计:

id user_id token expires_date create_time update_time
1 41000000 NGyuswVwxnXxz4BI1F1UyNoWWrxcuRiadPYpJcVTMN9DmDYrNvCEDdwMOS6o522JY8FPtQsLg 1456381021993 2016-02-25 2016-02-25
posted @ 2016-02-25 14:19  河畔一角  阅读(7291)  评论(0编辑  收藏  举报