网站自动登录功能的设计

摘要:
我相信有很多IT者都会遇到公司要求网站可以实现自动登录,那什么是自动登录呢?为何浏览器打开,网站就会自动登陆呢,那说明打开网站的时候,浏览器向服务器端发送了一个凭证,告诉服务器,我是你的真实用户,可放心开门,既然浏览器端需要提供凭证,那我们肯定会想到Cookie,只有Cookie才能在客户端永久保存,客户端从Cookie中提取信息后,服务器端识别后才能知道真伪,那说明服务器端是需要核验的。

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

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

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

网站自动登录功能的设计第1张

为何浏览器打开,网站就会自动登陆呢,那说明打开网站的时候,浏览器向服务器端发送了一个凭证(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

免责声明:文章转载自《网站自动登录功能的设计》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇带给你灵感的3D街画艺术设计旋转矩阵、欧拉角、四元数理论及其转换关系下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

一个封装了localStorage的增删改查的方法

localStorage的增删改查都其实比较简单,每次需要判断浏览器是否禁用,这挺麻烦的; 而且没有像COOKIE一样的,自动过期时间,长期下去会有垃圾数据在里面;我们知道android的系统只支持5M存储空间,iphone是10MB,一旦超过限制会提示用户,甚至报错。 一、包含一下功能: 1、定时清理localStorage; 2、支持过期时间; 3、检...

php实现SESSION跨域

稍微大一点的网站,通常都会有不只一个服务器,每个服务器运行着不同的功能模块或者不同的子系统,他们使用不同的二级域名,比如www.a.com、i.a.com、bbs.a.com。而一个整体性强的网站,用户系统是统一的,即一套用户名、密码在整个网站的各个子系统中都是可以登录使用的。各个服务器共享用户数据是比较容易实现的,只需要在后端放个数据库服务器,各个服务器...

JSP(二)

JSP九个内置对象(四大作用域对象): 1.内置对象称为隐式对象由tomcat容器创建 : appliction:全局上下文对象 session:会话对象 request:请求对象 pageContext:当前页面对象 response:响应对象 config:配置文件对象 out:输出对象 execption:异常对象 pageContext.getEx...

基于Cookie的SSO登录分析和实现

什么是SSO? 现在很多大的互联网公司都会有很多的应用,比如以下是淘宝网的截图: 天猫 聚划算 头条等都是不同的应用,有的甚至采用完全不同的域名,但是所有在淘宝注册的用户都是使用的一套用户名和口令,如果在这些系统直接切换做不到登陆状态的同 步,体验是非常差的。再举个栗子,很多公司内部系统也有很多个,比如HR系统,财务系统,考勤系统等等,如果员工在一...

js-cookie 插件的使用方法, cookie的使用存储和删除

一、安装 npm install js-cookie --save 二、引用 import Cookies from 'js-cookie' 三、一般使用 存到Cookie去 // Create a cookie, valid across the entire site:   Cookies.set('name', 'value');       /...

Java Servlet 中文API说明

JavaServlet中文API说明 这份文档描述了Java Servlet API的最新版本2.1版。所以,这本书对于Servlet的开发者及servlet引擎的开发者同样适用。 Java Servlet API的组成 Java Servlet API由两个软件包组成:一个是对应HTTP的软件包,另一个是不对应HTTP的通用的软件包。这两个软件包的同时...