会话(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%\conf\web.xml文件中设置,以分钟为单位;
<session-config>
<session-timeout>30</session-timeout>
<session-config>
(2)在项目的WEB-INF\web.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 Settings\Administrator\Local Settings\Temporary 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技术---数据保存在客户端,不安全