会话技术:Cookie&Session

会话技术:Cookie、Session

一、会话

指客户端浏览器与服务器之间的通信,其基于***Http***协议如有一方连接断开,则本次会话结束。在一次会话中包含若干次请求和响应,可以在一次会话的范围内的多次请求间,共享数据

使用最广泛的会话技术:Cookie、Session:

数据存储位置数据大小数据安全
Cookie客户端有限制不安全
Session服务器没有限制相对安全

二、Cookie

2.1 概述

客户端会话技术,基于Http协议的请求头与响应头。
存储数据时,服务器向客户端浏览器发送set-cookie响应头(为键值对)提取数据时,本次会话客户端浏览器向服务器的请求头加上cookie

通常,浏览器对单个cookie的大小限制在4kb,每个域名下不多于20个cookie。

主要被用来存储少量不重要、不敏感的信息或在不登录的情况下,完成服务器对客户端浏览器的身份识别,保存对网页的设置等。

2.2 发送、获取

Cookie << new Cookie(String name, String value) 创建Cookie对象,绑定数据

void Response :: addCookie(Cookie cookie) 通过响应发送Cookie对象
可以通过多次调用Cookie :: addCookie()方法创建多个cookie对象

获取Cookie对象:
Cookie[] << Request :: getCookies()

得到数据
String << Cookie :: getName()
String << Cookie :: getValue()

2.3 设置存储时间

默认情况下,浏览器关闭时Cookie数据被销毁;可以通过
void Cookie :: setMaxAge(int second)方法设置存储时间

int型参数:

  • 正数:浏览器将Cookie文件写入硬盘中,持久化存储,时间到后文件失效
  • 0:浏览器删除存储的Cookie信息
  • 负数:默认值,关闭浏览器后Cookie文件销毁

2.4 中文存储

Tomcat8之前cookie不能存储中文,之后支持存储中文数据但还是不支持特殊字符,如空格。
可以通过采用任意编码形式编码后存储。

URL编码:每个字节使用:%16进制数 表示(如%3E)
GBK形式使用3个字节表示一个汉字,UTF-8形式使用4个字节表示一个汉字

String << URLEncoder :: encode(String s,String enc)
String << URLDecoder :: decode(String s,String enc)
String s: 目标字符串,String enc: 编解码字符

2.5 共享数据

默认设置下不能共享数据,但可以通过Cookie类的方法实现同一服务器的多个WEB项目间、同一域名的不同服务器间共享数据。

同一服务器的多个WEB项目间共享数据:
void << Cookie :: setPath(String path)默认下path为项目当前虚拟目录,修改path为“/” 即可共享

同一域名的不同服务器间共享数据:
void << Cookie :: setDomain(String path) 设置一级域名相同即可

cookie.setDomain(". baidu.com"),那么[tieba.baidu.com]和[news.baidu.com]中的cookie可以共享数据

三、Session

3.1 概述

服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的HttpSession对象中;
Session的实现基与Cookie,首次获取HttpSession对象时,服务器响应时设置一个键为JSESSIONID、值为随机生成的一个Cookie响应头

注:每次关闭浏览器后,再重新请求会开启一个新的Session对象

3.2 获取、使用

获取HttpSession对象

HttpSession << Request ::getSession()

使用HttpSession对象(域对象特性)

void << HttpSession :: setAttribute(String name, Object value)

Object << HttpSession :: getAttribute(String name)

void << HttpSession :: removeAttribute(String name)

3.3 客户端Session存活数间

默认设置下,浏览器关闭时,客户端Session内存即被释放,可以自定义Cookie设置Session在客户端浏览器的存活时间

Cookie c = new Cookie("JSESSIONID",session.getId());
c.setMaxAge(60*60);
response.addCookie(c);

3.4 服务器端Session销毁

默认设置下,浏览器关闭时,客户端session内存即被释放,但服务器仍然保存该session,30分钟内没有再次接收到请求会将其销毁。通过修改服务器配置属性可以更改Session失效时间

全局修改:

tomcat/conf/web.xml中修改 < session-timeout>标签包裹的值

单个项目修改:
在项目的*.xml配置文件中,配置

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

调用 void << HttpSession :: invalidate() 方法,手动销毁该Session

3.5 服务器端Session保存

tomcat自动完成Session的序列化与反序列化;

在服务器正常关闭之前,会将HttpSession对象序列化化到硬盘上,并在在work目录下生成[.ser]文件;

在服务器启动时,将[.ser]文件转化为内存中的HttpSession对象,并将work目录下.[.ser]文件删除。

注:使用IDEA部署项目支持还自动操作,每次用idea重启tomcat的时候,会自动删除catalina_base中work目录

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值