java里的会话技术

会话技术:
1、cookie
2、seesion

会话:浏览器第一次给服务器资源发送请求 会话 建立,直到有一方断开为止,

  • 功能:在一次会话的范围内的多次请求间共享数据;
    • 客户端会话技术 cookie
    • 服务器端会话技术 seesion

cookie(客户端会话技术)

1、创建cookie对象,绑定数据

new Cookie(String name , String 
value)

2、发送cookie对象 给浏览器

response.addCookie(Cookie cookie)

3、获取cookie拿到数据

Cookie[] resquest.getCookies();

具体实现原理:
当客户端第一次访问服务器时,服务器会在响应头返回客户端一个cookie信息,客户端会自动把这个相应头的cookie信息存储到浏览器里,
当客户端再次访问服务器时会在请求头里携带保存的cookie信息访问服务器;

Cookie 细节:
操作规则,常用API
1、一次可不可以发送多个cookie

可以发送多个cookie

2、cookie在浏览器中保存多长时间

默认情况下当浏览器关闭后就没有了
持久化存储:setMaxAge(int seconds); 设置时间 参数值 正 负 零
1、正 :将cookie数据写到硬盘的文件中,持久化存储。还代表cookie的存活时间
2、负:浏览器一关就没有了,默认
3、零:不代表存在内存和硬盘,代表删除cookie信息

3、cookie能不能存储中文?

tomcat8之前不能存储中文数据#采用URL编码(%e3)进行转码
tomcat8后可以存储中文数据

4、cookie共享问题?

假设在一个服务器中,部署了多个web项目,那么在这个web项目下cookie能够共享吗?
默认情况下cookie是不能共享
在cookie对象里面通过setPath(String path):设置cookie范围。
默认情况下会去设置当前的虚拟目录;cookie.setPath(“当前项目路径”);
cookie.setPath("/");当前服务器下的cookie这样当前服务器下项目都能共享
以上是同一个服务器cookie共享


不同服务器中的cookie共享
举例:百度 下面的新闻(news.baidu.com)和贴吧(tieba.baidu.com)是属于两个项目 但是他们肯定不是部署在一个服务器上的,在一个服务器上很难承受这么大的访问量;
setDomain(String domain);设置一级域名相同,多个服务器之间的cookie就可以共享了
setDomain(“baidu.com”)那么百度和贴吧的cookie就能共享了

cookie的特点和作用
1、cookie存储数据在客户端浏览器(相对不安全容易被串改)
2、浏览器对于单个cookie大小有限制(~=4kb),以及对同一个域名下的总cookie也有限制(20个以内)

一般用于存储少量不太敏感的数据到浏览器,
在不登录的情况下,完成服务器对客户端的身份识别

案例 :
记住上一次访问时间:
1、访问一个servlet第一次访问的时候提示:欢迎访问;
2、第二次访问的时候提示欢迎回来你上一次访问时间为;

逻辑简单这里不暂时代码 tomcat8后虽然支持中文但是 不支持特殊字符
时间对象字符串格式化后里面会出现空格因此 会出现
An invalid character [32] was present in the Cookie value的错误
使用RRI 对字符进行
URLEncoder.encode(accessTime, “utf-8”); 格式化时间对象的字符串进行解码

解码后会发现例外一个问题问题
在这里插入图片描述
需要解码Value的值展示给用户看:value = URLDecoder.decode(value);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值