• .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。

  • 相关阅读:
    uniapp 基于 flyio 的 http 请求封装
    微信小程序实现连续扫码功能(uniapp)
    定时器+echarts运行时间太长导致内存溢出页面崩溃
    vue2.0 + element ui 实现表格穿梭框
    js 不同时间格式介绍以及相互间的转换
    vue2.0+Element UI 表格前端分页和后端分页
    vue2.0 + Element UI + axios实现表格分页
    kafka能做什么?kafka集群配置 (卡夫卡 大数据)
    Java List和Map遍历的方法,forEach()的使用
    Flink 集群搭建,Standalone,集群部署,HA高可用部署
  • 原文地址:https://www.cnblogs.com/zltao/p/10388278.html
Copyright © 2020-2023  润新知