• session cookie 在用户登录中的使用


    cookie的机制:

    Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站跟踪用户,实现用户自定义功能。

    Cookie的Domain和Path属性标识了这个Cookie是哪个网站发送给浏览器的;Cookie的Expire属性标识了Cookie的有效时间(如果不设置过期时间,则表示这个Cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。即会话cookie,会话cookie保存在内存里;设置了expire的cookie保存在硬盘上,保存在硬盘上的cookie可以在不同的浏览器进程间共享)。

    session的机制:

    session是存放在服务器端的类似于HashTable结构。

    当浏览器第一次发送请求时,服务器自动生成一个hashtable和一个sessionID,然后通过响应发送到浏览器。

    当浏览器第二次发送请求时,会将sessionID放在请求中一并发送到服务器上,取出sessionID,找到hashtable 对比。

    session的客户端实现形式(即sessionID在客户端的保存方法):

         方法一:使用cookie来保存(“记住我的登录状态”功能就是这么实现的)

                      服务器通过设置Cookie的方式将Session ID发送到浏览器。如果我们不设置这个过期时间,那么这个Cookie将不存放在硬盘上,当浏览器关闭的时候,  Cookie就消失了,这个Session ID就丢失了。如果我们设置这个时间为若干天之后,那么这个Cookie会保存在客户端硬盘中,即使浏览器关闭,这个值仍然存在,下次访问相应网站时,同 样会发送到服务器上。

    方法二(不常用):使用URL附加信息的方式,也就是像我们经常看到JSP网站会有aaa.jsp?JSESSIONID=*一样的。这种方式和第一种方式里面不设置 Cookie过期时间是一样的。

    方法三(不常用):是在页面表单里面增加隐藏域,这种方式实际上和第二种方式一样,只不过前者通过GET方式发送数据,后者使用POST方式发送数据。但是明显后 者比较麻烦。

    实现“记住我的登录状态”的功能

    其实这已经很好的实现了我们的功能了。但是,前面也提到了,实际上Session并不会一直都存在的,过了一定的时间之后,服务器上的Session就被 销毁了,以减轻服务器的访问压力。当服务器上的数据被销毁后,即使客户端上存放了Cookie也没有办法“记住我的登录状态”了。

     通常的实现办法是,将用户的用户名和加密之后的密码也通过cookie的方式存放在客户端,当服务器上的Session销毁以后,使用cookie里面存放的用户名和加密之后的密码重新执行一次登录操作,重建Session,并更新客户端上cookie中存放的sessionID。

    多点登录问题怎么解决?

    为每个登录的用户分配一个唯一的令牌,比如GUID,客户端的请求必须提供这个令牌,
    这样当同一个用户再次登陆时,用户对应的令牌被重写,前一个客户端的令牌失效,自然就被踢了
  • 相关阅读:
    Python基础总结之第三天开始重新认识‘字符串’(新手可相互督促)
    Python基础总结之第二天从变量开始(新手可相互督促)
    Python基础总结之第一天(新手可相互督促)
    简析 Golang IO 包
    简析 Golang net/http 包
    Elasticsearch Query DSL 语言介绍
    Golang Context 包详解
    解读 kubernetes client-go 官方 examples
    ACM学习之路___HDU 1385(带路径保存的 Floyd)
    ACM学习之路___HDU 2066 一个人的旅行
  • 原文地址:https://www.cnblogs.com/dovfwx/p/7520581.html
Copyright © 2020-2023  润新知