会话技术:

会话技术:

会话:为了实现某一个功能,浏览器和服务器之间可能会产生多次的请求和响应
从浏览器访问服务器开始,到浏览器关闭,访问服务器结束为止,这期间产生的多
次请求和响应加在一起就是浏览器和服务器之间的一次会话
- 会话的过程中可能会产生一些数据,而这些数据是需要我们保存起来的

那么:如何来保存会话中产生的数据?(除了将数据加入数据库)
答:cookie 或者session 来保存会话中的数据

1.2 Cookie

1.Cookie保存数据的原理
|-如图所示
2.创建Cookie 对象:
Cookie cookie = new Cookie(String name ,String value);
(Cookie的名字,Cookie的值[也就是要保存的会话数据])
3.创建好的Cookie最终要发送给浏览器:
response.addCookie(Cookie cookie);–将cookie添加到响应中以便于发送给浏览器
|-可同时调用多次该方法,同时添加 多个cookie
4.服务器获取请求响应中的所有cookie
获取请求中的所有的Cookie对象 组成的 数组:
resquest.getCookies(); --获取请求中所有cookie对象组成的数组
– 如果请求中没有cookie信息,该方法会返回null
5.Cookie的常用方法:
|— cookie.getName();-- 获取cookie的名字//cookie一经创立,名字就不可以修改
|— cookie.getValue(); – 获取cookie的值,(cookie 中保存的数据)
|— cookie.setValue(String Value) --修改cookie的值
|— setMaxAge(); --设置cookie的存活时间
|= 如果不设置,就是会话的时间。
|= 如果不设置该方法:Cookie的默认是会话级别的,是保存在浏览器的内存中,
在浏览器关闭时,cookie就会销毁
|= 如果设置了该方法,并且是一个正值,cookie就会以文件的形式保存在浏览器
的临时文件夹下,即使浏览器关闭,cookie也不会销毁。
6.删除cookie: 要注意Cookie的Api中没有提供直接删除的cookie的方法
可以通过设置cookie的生存时间来进行删除 即 cookie.serMaxAge(0)
思想:新建一个servlet去存放一个同名的cookie(比如名称为prod:cookie),在此servlet中将
cookie的生存时间设置为0,检测到此时cookie的生存值为0,由于浏览器是根据cookies的名字+path+domain
来区分一个cookie的,如果发送了两个名字相同的cookie后,后来的cookie会覆盖之前发送的
那个cookie,又由于后来的cookie的生存时间设置为0,所以浏览器收到后也会立即删除
–同一个主机,同一个路径。
eg:模拟购物车:
index.hml CartServlet/PayServlet/DeleteCookie
7.cookie处理中文问题
cookie 里面不能直接保存中文数据, index2.html
问题产生原因–HTTP协议规定了浏览器和服务器在通信时,不能直接传输中文数据
在之前我们访问时,不管是通过浏览器发送中文数据给服务器还是服务器响应中文数据
给浏览器,浏览器和服务器都会帮我们对中文数据进行URL编码,解码再次展示为中文

中文–URL编码–URL解码–中文 张飞----> %E5%BC%A0%E9%A3%9E----> 张飞
(浏览器) (服务器)

如果把中文数据保存在cookie中服务器没有帮我们进行URL编码,需要我们自己进行URL编码
,否则程序将会抛出异常
URLEncoder.encode(“张飞”,“utf-8”)

2 session 就是个域对象 里面有一个map 通过 key value

1.获取要保存的商品信息 prod = 小米手机
2.获取一个Session对象,将商品保存到Session对象中 session其实就是一个域对象
3.从session对象中获取之前保存的商品信息 prod = 小米手机
4.对商品进行结算
域对象:如果一个对象具有被访问的范围,并且该对象上具有一个map,通过该对象的map
集合可以在当前范围内实现数据的共享
session域对象提供的存取数据的方法:
|-session.setAttribute(String name , Object value)
–往session域中添加一个域属性

|—request.getSession(); -- 获取session对象--默认值是true。即一定返回一个session

/*request.getSession(false);
 * --加入参数 false,表示session返回,没有session返回null
 * */

|-session.getAttribute(String name)
–通过存进去的属性名,获取对应的属性值

|-session.removeAttribute(String name)
–根据名称删除指定的属性

session的三大特征

  1. 生命周期:
    创建:在一次调用request.getSession()方法时创建session对象
    Jsp: 当浏览器访问jsp 时,服务器会立即创建session对象,因为session是jsp的内置对象
    可以提前在配置头上鞋 session=“false”
    销毁:
    |- 超时销毁: 默认超过30min
    超时时间配置: web.xml的根标签下修改超时时间



    没有访问session,session会超时销毁
    |- 自杀:当调用session的invalidate方法时,会销毁session
    |- 意外身亡: 当服务器非正常关闭,session也会跟着销毁
    当服务器正常关闭,session对象不会销毁,而是以文件的形式保存在硬盘上
    这叫做session对象的序列化(钝化)。当服务器再次启动时,钝化着的session
    还可以再次恢复到服务器,这个过程叫做反序列化

如果服务器正常关闭,session对象是不会销毁的
2. 作用范围:整个会话范围内
3. 主要功能:在整个会话范围内实现数据的共享,比如:作为购物车使用,保存用户的登录状态
session.30分钟就会销毁

session和cookie的联系:
1.session是基于cookie来进行工作的
|-当session创建时,服务器会为session分配一个独一无二的编号也就是session的ID,在这次响应时,
服务器在底层会将session的ID以cookie的形式发送给浏览器保存
当浏览器下次访问服务器时,服务器可以获取session的ID通过ID找到对应的session
如果在这个过程中,浏览器删除了保存了sessionId的cookie,即使session没有销毁
由于浏览器无法把session的ID带回服务器这样也获取不到session
区别:
cookie是吧会话中的数据保存在浏览器客户端,是客户端技术
|-保存在客户端就容易随着用户的操作导致cookie丢失或者被窃取,因此cookie中保存的数据不太稳定也不安全
|-但是保存在cookie的数据保存在客户端,对服务器端不会有太多的影响因此可以保存很长时间
故:cookie中适合保存安全性要求不高,但是需要很长时间保存的数据
|-浏览器对cookie的大小和个数都有限制,一般推荐每一个站点给浏览器发送的cookie的数量不超过20个每一个大小不超过1kb
|-一般应用在购物车、记住用户名、显示上次访问的时间、地点
session是将会话中产生的数据保存在服务器端,是服务器端的技术,相对而言更加安全,而且更加稳定
不容易随着用户的操作而导致session中的数据丢失或者被窃取
|-适合存储安全性要求高,但是不需要长时间保存的数据,
|-用在保持登录状态
如果有对安全性安全较高,也需要长时间保存的数据,----数据加密后保存在cookie中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值