zoukankan      html  css  js  c++  java
  • .Net转Java自学之路—基础巩固篇二十八(Cookie、Session)

    Cookie:

       Http协议规定:

        1个Cookie最大4kb;1个服务器最多向一个浏览器保存20个Cookie;1个浏览器最多可以保存300个Cookie。

      JavaWeb中使用Cookie:

        原始方式:使用response发送Set-Cookie响应头;使用request获取Cookie请求头

        便捷方式:使用response.addCookie()向浏览器保存Cookie;使用request.getCookie()获取浏览器兑换的Cookie

      Cookie详解:

        Cookie不是只有name和value两个属性。

        maxAge:Cookie的最大生命周期,即Cookie可保存的最大时长。秒为单位。例:cookie.maxAge(60)

          maxAge>0:浏览器会把Cookie保存到客户端硬盘上;有效时长为maxAge值。

          maxAge<0:Cookie只在浏览器内存中存在,关闭浏览器,Cookie移除。

          maxAge=0:浏览器会马上移除这个Cookie

        path:Cookie的path并不是设置这个Cookie在客户端的保存路径。Cookie的path由服务器创建Cookie时设置。

          当浏览器访问服务器某个路径时,是否需要归还Cookie给服务器,则时由Cookie的path来决定。

          当浏览器访问服务器的路径,若包含某个Cookie的路径,那么九会归还这个Cookie。

          Cookie的path默认值:当前访问路径的父路径。

        domain:用来指定Cookie的域名;当多个二级域共享Cookie时才有用。

    Session:

      HttpSession概述:

        HttpSession是由JavaWeb提供的,用来会话跟踪的类。session是服务器端对象,保存在服务器端。

        HttpSession是Servlet三大域对象之一,所以它也有setAttribute()、getAttribute()、removeAttribute()方法。

        三大域:request、session、application(ServletContext)

      作用:

        会话范围:会话范围是某个用户从首次访问服务器开始,到该用户关闭浏览器结束。

        会话:一个用户对服务器的多次连贯性请求;所谓连贯性请求就是该用户多次请求中间没有关闭的浏览器。

        服务器会为每个客户端创建一个session对象,session就好比客户在服务器端的账户,他们被服务器保存到一个Map中,这个Map被称为session缓存。

        Servlet中得到session对象:HttpSession ses=request.getSession();

        JSP中得到session对象:session是JSP内置对象之一,故、不用创建可直接使用。

      原理:

        request.getSession():获取Cookie中的sessionId

          若sessionId不存在,创建session,把session保存起来,把新创建的sessionId保存到Cookie中。

          若sessionId存在,通过sessionId查找sesion对象,若干没有找到,创建session,把session保存起来,把新创建的sessionId保存到Cookie中。

          若sessionId存在,通过sessionId找到了session对象,那么就不会再创建session对象。

          返回session

        若创建了新的session,浏览器会得到一个包含了sessionId的Cookie,这个Cookie的生命为-1,即只在浏览器内存中存在,若不关闭浏览器,那么Cookie下次请求时,再次执行request.getSession()时,因为可以通过Cookie中的sessionId找到session对象,所以与上一次请求使用的是同一session对象。

        request.getSession(true)与request.getSession():这俩个方法效果相同。

        request.getSession(false):若session缓存中(如果Cookie不存在),不存在session,那么返回null,而不会创建session对象。

        HttpSession其他方法:

    String getId();//获取sessionId
    int getMaxInactiveInterval();//获取session的最大不活动时间。默认30分种。
    void invalidate();//让session失效。
    boolean isNew();//查看session是否为新。

      web.xml中配置session的有效时长:

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

      URL重写:

        session依赖Cookie,目的是让客户端发出请求时归还sessionId,这样才能找到对象的session。

        若客户端禁用了Cookie,那么就无法得到sessionId,那么session也就无用了。

        也可以使用URL重写来替代Cookie:response.encodeURL(url);

          该方法会对URL进行只能的重写;当请求中没有归还sessionId这个cookie,那么该方法会重写url,否则不重写。此url必须是本站的url。

  • 相关阅读:
    第26月第26天 Domain=AVFoundationErrorDomain Code=-11850
    第26月第25天 ubuntu openjdk-8-jdk jretty
    第26月第23天 nsobject 单例 CFAbsoluteTimeGetCurrent
    第26月第22天 iOS瘦身之armv7 armv7s arm64选用 iOS crash
    第26月第20天 springboot
    第26月第18天 mybatis_spring_mvc pom
    python中的字符数字之间的转换函数
    python if else elif statement
    python 赋值魔法
    python print import使用
  • 原文地址:https://www.cnblogs.com/zltao/p/10388278.html
Copyright © 2011-2022 走看看