zoukankan      html  css  js  c++  java
  • 网站自动登录功能的设计

    我相信有很多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
  • 相关阅读:
    MQTT TLS 加密传输
    python多进程并发redis
    各种消息队列的特点
    mqtt异步publish方法
    Numpy API Analysis
    Karma install steps for unit test of Angular JS app
    reinstall bower command
    Simulate getter in JavaScript by valueOf and toString method
    How to: Raise and Consume Events
    获取对象的类型信息 (JavaScript)
  • 原文地址:https://www.cnblogs.com/jacksoft/p/5216862.html
Copyright © 2011-2022 走看看