zoukankan      html  css  js  c++  java
  • Session、Cookie

    HTTP协议是无状态的,不能保存每次提交的信息,即当服务器返回与请求相对应的应答之后,这次事务的所有信息就丢掉了。如果用户发来一个新的请求,服务器无法知道它是否与上次的请求有联系。对于那些需要多次提交数据才能完成的Web操作,比如登录来说,就成问题了。所以需要状态管理也就是通过Cookie和Session。

    Session机制
    当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个 session标识 - 称为session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个 既不会重复,又不容易被找到规律以仿造的字符串 ,这个session id将被在本次响应中返回给客户端保存。

    由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器。经常被使用的一种技术叫做URL重写
    两种形式:

    // 作为url附加路径
    'http://..../xxx;jsessionid=abcdefjijeoijoifjioe'
    // 作为查询字符串
    'http://..../xxx?jsessionid=abcdefjijeoijoifjioe'
    

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

    Cookie的Domain和Path属性标识了这个Cookie是哪一个网站发送给浏览器的;Cookie的Expires属性标识了Cookie的有 效时间,当Cookie的有效时间过了之后,这些数据就被自动删除了。

    如果不设置过期时间,则表示这个Cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,Cookie就消失了。这种生命期为浏览会话期的 Cookie被称为会话Cookie。会话Cookie一般不保存在硬盘上而是保存在内存里。如果设置了过期时间,浏览器就会把Cookie保存到硬盘 上,关闭后再次打开浏览器,这些Cookie依然有效直到超过设定的过期时间。存储在硬盘上的Cookie可以在不同的浏览器进程间共享,比如两个IE窗 口。而对于保存在内存的Cookie,不同的浏览器有不同的处理方式。

    如何得到cookie:有两个http头部是专门负责设置以及发送cookie的,它们分别是 Set-Cookie 以及 Cookie 。当服务器返回给客户端一个http响应信息时,其中如果包含Set-Cookie这个头部时,意思就是指示客户端建立一个cookie,并且在后续的http请求中自动发送这个cookie到服务器端,直到这个cookie过期。

    记住我的登录状态:
    通用的实现办法是,将用户的用户名和加密之后的密码也通过Cookie的方式存放在客户端,当服务器上的Session销毁以后,使用Cookie里面存 放的用户名和加密之后的密码重新执行一次登录操作,重建Session,并更新客户端上Cookie中存放的的Session ID,而这个操作是发生在用户请求一个需要身份验证的页面资源的背后,对于用户来讲是透明的,于是就达到了“记住我的登录状态”的目的了。

    session:重复提交表单(jsp设置表单隐藏域值,session设置值。两者一样。后台验证相同后移除session中的值。不一样就提示重复提交)、过期自动跳转登录(过滤器中getAttribute(user)==null跳转登录页面)

    分布式单点登录:登录用户信息存入redis,通过cookie返回uuid(key),zull中通过设置头信息把uuid在不同服务中进行传递,各服务器再拿uuid去redis取信息。

    Auth2.0:步骤2、4为重定向 4返回授权码(重定向,授权码地址可见)是为了安全,然后使用code获取加密token(安全,避免其他利用code获取token,如果token为明文信息,则用户可以用token信息再去qq获取用户信息),在后面就是利用token密文获取用户明文信息(这里如果还会出问题就是服务器被入侵了)。

  • 相关阅读:
    Python 网络爬虫
    Linux 下安装 java 运行环境 jdk1.8
    SSH: Transferred 0 file(s) 解决
    java idea 好用的插件
    java idea 安装 环境配置等 注意事项(只是备注给自己看的事项,不是安装教程)
    git 上传已有项目 到git仓库 初始化git并上传
    git 清除远程仓库已经删除的本地分支 清除已经合并到master的本地分支
    oracle trunc 日期 数字 的使用例子
    股票小白2
    股票小白知识点1
  • 原文地址:https://www.cnblogs.com/leifonlyone/p/12930136.html
Copyright © 2011-2022 走看看