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技术---数据保存在客户端,不安全

原文地址:https://www.cnblogs.com/sheng-se/p/14376908.html