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。

  • 相关阅读:
    APS系统如何落地?用户实际痛点解析!
    供应链如何优化?高级排程系统为其运算
    不懂APS系统?十个问答让你对APS瞬间明明白白
    智能制造主战场在哪?数字化车间建设尤为重要
    中国制造转型的关键在哪里?智能制造点亮发展明灯
    你家的APS系统有这些功能吗?排程系统功能盘点
    微软正开发Office Reader和Office Lens
    C#的3DES加密解密算法
    如何在SharePoint2010中创建自定义电子邮件警报处理程序
    规划SharePoint2010的管理员密码更改
  • 原文地址:https://www.cnblogs.com/zltao/p/10388278.html
Copyright © 2011-2022 走看看