zoukankan      html  css  js  c++  java
  • JAVA Web知识点整理(六)

    会话(Session)的基本概念

    在不关闭浏览器的情况下,用户对网站的一系列访问请求,称之为一次完整的会话

    (1)网上购物过程中,登录--> 浏览商品 --> 加入购物车 --> 下单 --> 查看我的订单 --> 退出
    (2)使用邮箱过程中,登录--> 收邮件 --> 回复邮件 --> 写邮件 --> 查看已发送邮件 --> 退出

    会话跟踪的工作原理

    (1)服务器内部维护一张表SessionTable,此表的主键就是sessionid,其它字段就是客户的相关信息,也就是程序中使用session.setAttribute()方法保存的属性数据
     
    (2)客户端浏览器第一次访问服务器时
     
       (2.1)服务器自动生成了一个新的sessionid用来唯一标识此客户

       (2.2)在表中插入一条新记录,主键是sessionId

       (2.3)将此sessionid作为内存cookie发送到客户端浏览器中,Cookie的name为JSESSIONID,Cookie的value是32位的十六进制字符串
          
    (3)以后客户端再访问服务器时,浏览器会自动携带此内存cookie给服务器,服务器根据cookie的值,通过查表就能知道是哪个客户发来的请求

    设置session失效时间的三种方式

    (1)在%TOMCAT_HOME%confweb.xml文件中设置,以分钟为单位;

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

    (2)在项目的WEB-INFweb.xml文件中设置,以分钟为单位;

    (3)调用session.setMaxInactiveInterval()方法,以秒为单位;

       以上三种配置方式的优先级顺序为(1) < (2) < (3)

    Cookie的基本概念

    Cookie的基本概念
    ---------------------------
    (1)定义---Cookie(小甜饼,曲奇)是服务器发送到客户端的一段文本信息,该信息用于保存客户的个性化信息,服务器可以借助Cookie中的信息区分不同的用户。

    (2)Cookie的应用举例

       (2.1)记住上一次登录的时间

       (2.2)记住上一次登录的用户名或密码

       (2.3)在一周或一个月内自动登录

       (2.4)记住用户最近浏览的商品

    Cookie的工作原理

    (1)服务器将客户特定的文本信息(Cookie)以名-值对的形式发送到客户端浏览器;

    (2)浏览器再次访问服务器时,会自动把当前应用下的所有Cookie信息作为请求信息的一部分,封装到request对象中并传送给服务器,这样服务器就能识别出本次请求来自哪一个客户端
       这一点很关键,如果浏览器不具备这个功能,那么会话跟踪就无法实现

    Cookie的分类

    (1)内存Cookie---保存在客户端浏览器内存中,只要浏览器关闭,内存Cookie就消失了;

    (2)持久化Cookie---保存在客户端硬盘上,以文本文件的形式存放,能够保存一段时间;

    (3)查看持久化Cookie的存放位置

       (3.1)IE浏览器

            工具 --> Internet选项 --> 常规 --> 设置 --> 查看文件 --> C:Documents and SettingsAdministratorLocal SettingsTemporary Internet Files

       (3.2)FireFox浏览器
         
            工具 --> 选项 --> 隐私 --> 在历史选项框中选择“使用自定义历史记录设置”--> 显示Cookies

    Cookie的基本操作

    (1)使用request对象查看客户端存放的Cookie信息

       客户端请求服务器时,会自动将Cookie信息封装在request对象中,可以调用request.getCookies()查看Cookie的信息
     
    (2)使用response对象发送Cookie到客户端

       (2.1)创建内存Cookie的步骤

           (2.1.1)实例化Cookie对象

           (2.1.2)调用response.addCookie()方法,将Cookie发送到客户端浏览器中

       (2.2)创建持久化Cookie的步骤

           (2.2.1)实例化Cookie对象

           (2.2.2)调用setMaxAge()方法设置持久化Cookie在硬盘上的保存时间

           (2.2.3)调用response.addCookie()方法,将Cookie发送到客户端浏览器中

    (3)删除Cookie

       (3.1)创建一个同名的cookie

       (3.2)将保存时间设置为0
     
       (3.2)发送此同名cookie

    Cookie和Session的区别

    (1)保存数据的位置不同

       Cookie技术将数据全部保存在客户端浏览器或客户端硬盘上,安全性低;
       Session技术将数据保存在服务器中,安全性高,只是借助cookie技术保存sessionId到客户端浏览器中;

    (2)保存数据的类型不同

       Cookie中只能保存文本信息;
       Session中可以保存任意类型的数据;

    (3)有效时间的设置方法不同:

       Cookie使用setMaxAge()方法,其中0表示立即删除cookie,负数表示浏览器关闭时删除cookie;
       Session使用setMaxInactiveInterval()方法,其中0表示立即销毁session,负数表示session永不过期;

    (4)销毁时机不同   

       当用户关闭浏览器时,内存Cookie被销毁;当设置的MaxAge到期时,持久化Cookie被销毁;
       当Session到期时,或调用invalidate()方法,或服务器关闭或重启时,Session被销毁;

    Seesion浏览器关闭后的销毁过程

    (1)关闭当前浏览器窗口时,内存cookie丢失,即客户端浏览器中保存的sessionId丢失,而此时服务器的SessionTable中的数据没有任何变化;

    (2)再次打开新的浏览器窗口时,服务器会自动发送新的sessionId过来,而此sessionId对应的购物车中一定没有任何商品信息的,原来的购物车作为垃圾数据依然保留着;
       等到session到期后,服务器会自动删除购物车中的信息;

    会话跟踪的四种方式

    (1)使用Session技术---以Cookie为基础,将数据保存在服务器端,客户端仅保存名为JSESSIONID的内存cookie    常用

    (2)浏览器禁用Cookie时,在程序代码中可以使用两种手段
     
       (2.1)URL重写---使用response.encodeURL()方法,将JSESSIONID附加到URL上,从而实现会话跟踪

       (2.2)使用隐藏域---<input type="hidden" name="xxx" value="xxx" />,此方式属于早期技术,现在基本不使用

    (3)使用Cookie技术---数据保存在客户端,不安全

  • 相关阅读:
    Java 泛型,你了解类型擦除吗?
    终于有人把 Nginx 说清楚了,图文详解!
    给你一份超详细 Spring Boot 知识清单
    Java 中的 SPI 机制是什么鬼?
    用 Git 和 Github 提高效率的 10 个技巧!
    聊聊微服务架构及分布式事务解决方案!
    python多线程同步机制Lock
    python多线程同步机制Semaphore
    mysql 慢查询时间
    mysql row模式查看原始sql
  • 原文地址:https://www.cnblogs.com/sheng-se/p/14376908.html
Copyright © 2011-2022 走看看