Cookie/Session

会话:管理游览器客户端 和服务器端之间的会话过程中产生的数据

 

软件的会话:打开游览器 -- 访问网站 --》关闭游览器

 

域对象:实现资源之间的数据共享

 

contest 是所有用户共有的资源,会覆盖数据

request 则必须用转发形式跳页面

 

解决方法:

 

session 域对象来保存数据!

 

会话技术:

 

Cookie 技术: 会话数据保存在游览器客户端

 

Session 技术: 会话数据保存在服务器端

 

Cookie

 

特点:数据保存在游览器客户端

 

核心:Cookie类:用于存储会话数据

 

构造:Cookiename,value)

 

设置Cookie:

 

setPath(uri)   设置cookie 的有效访问路径

 

setMaxAge(1)   设置cookie的有效时间

 

setValue(newValue)  设置cookie的值

 

发送cookie到游览器端保存:

 

response.addCookie(Cookie cookie)

 

 

服务器接收cookie

 

request.getCookies()

 

 

使用:

 

1、创建对象

 

Cookie cookie = newCookie("email","eric@qq.com"):

 

2、把cookie数据发送到游览器(通过响应头:set-cookie

 

response.setHeader("set-cookie",cookie.getName()+"="+cookie.getValue()+",email=erice@qq.com");

 

//推荐使用这种方式,避免手动发送cookie信息

response.addCookie(cookie);

 

 

3、游览器接受发送的Cookie信息

 

request.getHeader("cookie");

Cookie[] cookies = request.getCookies();

 

原理:

 

1)服务器创建cookie对象,把会话数据保存在cookie对象中。

 

2)服务器发送cookie信息到游览器

 

3)游览器的到服务器发送的Cookie,保存到游览器

 

4 游览器在下次访问服务器时,会带着cookie信息

 

Cookie的细节:

 

1voidsetPath(uri)   设置cookie的有效访问路径。有效路径是指cookie的有效路径保存在哪里,则哪里就会带着cookie

 

2voidsetMaxAge(int expiry) 设置cookie 的有效时间

正整数,表示cookie数据保存游览器的缓存目录在硬盘中,数字表示保存的时间

负整数,表示cookie数据保存在游览器的内存中,游览器关闭cookie就丢失了

零,表示删除同名的cookie数据

 

3Cookie的数据类型只能保存字符串类型的,可以保存多个cookie,但游览器一般只允许存放300cookie,每个站点最多存放20cookie,每个Cookie的大小限制为4KB

 

案例:

 

用户上次访问:

第一次访问:

1、获取当前时间,显示到游览器中

 

2、创建Cookie对象,时间作为cookie 的值,名为:lastTime

 

3、把cookie发送到游览器

 

N次访问:

 

1、获取cookie的数据,取出lastTimecookie

 

2、得到cookie的值(上次访问的时间)

 

3、显示到游览器中

 

4、更新名为lastTimeCookie,值设置为当前时间

 

5、把更新后的Cookie发送给游览器保存

 

Session:

 

特点:

 

保存数据到服务器中(内存中),从哪个对象保存数据,就必须从哪个域对象中取出

 

代码解读

1、创建session对象 ,给session对象分配一个唯一的Id,叫JSessionId

HttpSession session = request.getSession();

2、把JsessionId作为Cookie的值发送给游览器

 

3、第二次访问的时候,游览器会带着JSESSIONIDcookie访问服务器,

 

4、服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应的编号sessionID

 

5、如果找到对应标号的sessio对象,直接返回该对象

 

6、如果找不到对应的session对象,创建新的session对象,继续走1的流程

 

结论:通过JSESSIONIDcookie值在服务器中搜索是否有该对象

 

 

核心Api

 

getId(); 获取session编号

getSession()/getSession(true);  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值