zoukankan      html  css  js  c++  java
  • Java Web 深入分析(9) Session 和 Cookie

    前言:

    • session 和cookie都是为了保持服务器和客户端之间交互状态。如果一天的PV有几亿,而一个cookie占200个字节但是也会占用很多带宽?所以大访问量就引用session,但是几百台服务器集群之间 有无法实现共享session。

    理解Cookie

    • 简单来说就是用户通过HTTP去访问服务器,然后服务器会返回一些key/value的数据给用户端,同时给这些数据加上一些限制条件,当用户再次访问服务器时,只要条件满足时就会被重新返回给服务器。W3C设计cookie最初是为了应对HTTP这种无状态协议去区分不同用户的,现在cookie也可以被用作服务器数据缓存判断的依据。
    • cookie属性项 ,目前分为了version0 和version1两个版本,常用的有max-age ,domain,expires,path等等,在Javaweb的servlet规范中,我们常用的set-cookie:user-name='hakulamatata';max-Age="1000"。
    • 客户端和服务端交互时,不需要每次都传递这么多次cookie ,这么做无疑是增加数据传输量。所以当客户端第一次连接到服务端,服务器会生成一个每个客户端唯一的ID,这个ID就是客户端保存着的 NAME =JSESIONID 的cookie,每次交互就把这个cookie id发过去 便于服务器识别。
    • 使用cookie的限制,虽然HTTP协议对于cookie的数量和占用空间大小是没有限制的,但是现代基本浏览器(主要指支持html5的浏览器) 对于数量限制基本都是每个域名不超过50个 ,占用空间而言 基本除了谷歌是 80000个字节,其他都是4095个字节。
    • cookie安全问题:容易想到既然cookie保存在客户端,就难免被他人利用篡改或者进行其他我们预料之外的操作,相比而言存放在服务端的 session就安全些,所以一些敏感信息 更适于存放在session里。
    • cookie压缩问题。如果大型网站PV上亿的那种,带宽和流量而言,压缩cookie很有必要,而根据cookie的规范 ,cookie只能是ASCII码为34-126的可见字符,所以我们必须使用Base64进行编解码,然后再利用gzip和deflate等压缩算法进行压缩,节省流量带宽成本。

    理解session

    • 前面讲过,web交互过程中不可能每次都把cookie都传回服务端,而是用一个 jesesionid的id 的cookie,这是session 的一种方式,还有基于 url 这两个都是默认支持的,最后还有一个是SSL的,这个不是默认支持的。当web.xml 配置了 session就会 以配置的 为sessionid,没配置就是以默认的jesesionid 为准,而url 则是以url传回的K-V键值对为依据构建 sessionid,而最后一种特殊情况就是 javax.servlet.request.ssl_session属性值设置 sessionid。

    Session 如何工作

    • 有了sessionid对象就可以去创建httpsesion对象了,第一次通过 request.getsession()方法,如果没有就创建新的,然后放到sessionmanager里面去管理,过期的就关闭,服务器关闭时就持久化到磁盘,只要有这个HTTPsession对象客户就可以获取这个对象,也就实现HTTP协议本身无状态,到技术实现其有状态的过程。

    扩展问题

    • 表单重复提交:就是在用户请求,在表单隐藏域中添加一个根据某个种子生成的随机数,也就是 token ,然后存放在session中,当用户提交表单时,在和这个存放在session中的对比,如果不同就是重复提交,如图

    • 多端session统一:主要涉及多端共享session,其次就是如图过程。

  • 相关阅读:
    Return Largest Numbers in Arrays
    Title Case a Sentence
    Find the Longest Word in a String
    Check for Palindromes
    Factorialize a Number
    Reverse a String
    nodejs使用场景
    居中div,居中浮动的元素
    WebSocket解释及如何兼容低版本浏览器
    HTML5的离线储存
  • 原文地址:https://www.cnblogs.com/humi/p/8362137.html
Copyright © 2011-2022 走看看