Cookie与Session

众所周知,我们浏览器与服务器之间的交流是通过Http(TCP/IP的应用层协议,超文本传输协议)协议约定的,一次请求对应一次响应

Http协议是一个无状态协议,意味着每一次的请求都是独立的,后续处理无法获取之前的数据,无法实现数据之间的共享,所以需要时就只能通过重传,但是这样会导致每次连接传送的数据量增大

现在我们来说一说解决方案:

1、使用参数传递机制,使用get传递,可以将参数拼接在URL之后,但是这种方式不安全,传递的参数数量有限

2、使用Cookie技术

3、使用Session技术

一、Cookie技术

*特点:客户端的技术,将共享数据保存在客户端(浏览器)中

           Cookie可以分为内存Cookie(非持久cookie)和硬盘Cookie(持久Cookie)

*cookie操作:

1、创建cookie对象,设置共享数据:Cookie c = new Cookie(String name,String value);但是一个cookie只能存储一个字符串类型的数据,不能存储其他类型的数据

2、将Cookie响应给浏览器:response对象.addCookie(cookie对象)

3、获取请求中的Cookie信息:Cookie[] cs = request对象.getCookies();

for(Cookie c:cs){

     if("username".equals(c.getName())){

          String value = c.getValue();

      }

}

4、修改Cookie中的共享数据

(1)重新创建一个新的cookie,名称和要修改的数据一致

(2)先获取到要修改的cookie对象,在调用setValue(String newValue)重新设置,修改cookie中的数据,需要再次发送给浏览器

5、cookie的生命周期

默认:在关闭浏览器的时候销毁Cookie对象

语法:void setMaxAge(int expiry)

expiry > 0:设置 Cookie 对象能够存活 expiry 秒,即使关闭浏览器,也不影响 Cookie 中的共享数据,比如设置一个月:setMaxAge(60*60*24*30);
expiry = 0:立即删除当前的 Cookie 信息,通过setMaxAge(0)来实现
expiry < 0:关闭浏览器时销毁

6、Cookie中的key和value不支持中文

设置Cookie时需要对中文字符串进行编码,在获取时进行解码

7、Cookie的路径和域范围可以进行设置

*Cookie的缺陷:

(1)获取Cookie信息比较麻烦

(2)Cookie不支持中文

(3)一个Cookie只能存储一个字符串类型的数据

(4)Cookie在浏览器中有大小和数量的限制

(5)共享数据时保存在浏览器中容易造成数据的泄露,不安全

二、Session技术

特点:服务器端技术,将数据保存在服务器

理解:cookie可以让服务器端程序跟踪每个客户端的访问,但是每次客户端的访问必须重新回传cookie到服务器上,cookie很多时就会增加客户端与服务器的数据传输量,session就是用以解决这个问题的

          同一个客户端每次与服务器交互时,不需要每次都回传有所得cookie值,而只需要回传一个id,这个id是用户第一次访问时产生的,而且每个客户端都是唯一的,这个id通常是name为jsesionid的一个cookie

session基本操作

1、获取session对象:request.getSession()

2、设置共享数据:session对象.setAttribute(String name,Object value)

注意:session可以存储任何类型的数据

3、修改共享数据:重新设置一个同名的共享数据

4、获取共享数据:Object value = Session对象.getAttribute(String name);

5、删除Session中的共享数据Session.removeAttribute(String name);

6、销毁session:void invalidate()

7、session的超时管理

      超时:在访问当前资源的过程中,不和网页进行任何的交互,超过设定的时间即为超时

      tomocat服务器中默认的配置为30分钟

      语法:void setMaxInactiveInterval(int interval) 

参考:https://www.cnblogs.com/wmyskxz/p/8805489.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值