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

    • session概念:在WEB开发中,服务器可以每个用户浏览器创建一个会话对象session对象),注意:一个浏览器独占一个session对象(默认情况下)。因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户浏览器独占的session中,当用户使用浏览器访问其它程序时,其它程序可以从用户的session中取出该用户的数据,为用户服务。session对象以键值方式存储在ConcurrentHashMap中。
    • session与cookie区别?
    1. Cookie是把用户的数据写给用户的浏览器(数据存在本地浏览器)。
    2. Session是把用户的数据写到用户独占的session中(数据存在服务器内存)。
    3. Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象
    • 服务器是如何实现一个session为一个用户浏览器服务的?
    服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,
    
    这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号去,服务器发现客户机浏览器带sessionid过来了,
    
    就会使用内存中与之对应的session为之服务。

    参考:https://www.cnblogs.com/xdp-gacl/p/3855702.html


    • 关于cookie
    1. cookie中包含信息:名字,值,过期时间,路径,域。
    2. cookie会带到http请求头中发送给服务器端。
    3. 如果cookie没有设置过期时间的话,那么cookie默认生命周期是浏览器的会话。
    • 浏览器查看cookie:


    • session机制
    1. session是容器对象,客户端在请求服务端的时候,服务端会根据客户端的请求判断是否包含了sessionid的标识。
    2. 如果已经包含了,说明客户端之前已经建立了会话。sessionid是唯一的值
    3. 如果sessionid不存在,那么服务端会为这个客户端生成一个sessionid。JSESSIONID
    • session对象的创建时机
    1. Session在用户第一次访问服务器的时候自动创建
    2. 需要注意只有访问JSPServlet等程序时才会创建Session,只访问HTMLIMAGE等静态资源并不会创建Session
    3. 如果尚未生成Session,也可以使用request.getSession(true)强制生成Session。
    4. 可以用isNew()方法来判断Session是不是新创建的(其它相关方法自寻查询)。
    • session对象的销毁时机
      • session对象默认30分钟没有使用,则服务器会自动销毁session,在web.xml文件中可以手工配置session的失效时间
    <?xml version="1.0" encoding="UTF-8"?>
       <web-app version="2.5" 
         xmlns="http://java.sun.com/xml/ns/javaee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
         http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
       <!-- 设置Session的有效时间:以分钟为单位-->
       <session-config>
           <session-timeout>15</session-timeout>
       </session-config> 
     </web-app>
      • 当需要在程序中手动设置Session失效时,可以手工调用session.invalidate方法,摧毁session。

    • session共享问题
    1. 基于session复制(同步复制,tomcat之间session相互复制)(会造成浪费存储空间)
    2. 基于session统一存储(每一个session都会存储到一起,可以存数据库中也可以存到redis中)
    3. 基于cookie机制(App生成一个token通过http带到浏览器,每次请求带上token)
    • JWT的解决方案(基于cookie机制)

    1. Json Web Token:客户端和服务端信息安全传递以及身份认证的一种解决方案:用到登陆上
    2. Jwt的组成:jwt由3个部分组成:header,playload,signature
      • header
    {
    type:"jwt"   //类型
    alg:"HS256"  //算法
    }
      • playload
    {
    
    //jwt本身规范提供的格式claims
    
    iss:""  //签发者
    
    iat:""  //签发时间
    
    exp:""  //过期时间
    
    sub:""  //jwt拥有着(主题)
    
    //自己定义一些claims
    
    uid:""
    
    }
      • signature  //header+playload组合成一个字符串
    • Base64(header).Base64(playload)组合的字符串根据算法密钥生成JWT的token。(str.签名字符串)
  • 相关阅读:
    如何解决aws解绑银行卡问题?
    如何解决macbook pro摄像头不工作的问题
    Window安装AutoCAD
    Mac应用程序无法打开,提示不明开发者或文件损坏的处理方法
    Android硬件抽象层(HAL)深入剖析(三)【转】
    Android硬件抽象层(HAL)深入剖析(二)【转】
    Android硬件抽象层(HAL)深入剖析(一)【转】
    Glide的用法
    Gradle-5.3:依赖-管理依赖的版本(传递(transitive)排除(exclude)强制(force)动态版本(+))
    Android 7.0 FileProvider 使用说明
  • 原文地址:https://www.cnblogs.com/LJing21/p/10757051.html
Copyright © 2011-2022 走看看