一、会话技术

1、会话:是指浏览器和服务器之间的通信

2、一次会话:浏览器给服务器资源发送请求,会话建立,直到有一方断开为止(一次会话存在多次请求和响应)

3、会话技术

(1)客户端:Cookie

(2)服务器端:Session

4、使用会话技术的理由

(1)实际上会话问题解决的还是客户端与服务器之间的通信问题;通过一些会话技术,可以将每个用户的数据以例如 cookie/session 的形式存储,方便以后用户访问 web 资源的时候使用;

(2)那么能不能用我们之前学过的 HttpServletRequest 对象和 ServletContext 对象来保存这些数据呢?答案是否定的。

  • 不能用 HttpServletRequest 的原因:我们的一次会话中,存在多次请求和响应,而浏览器客户端的每一次请求都会产生一个 HttpServletRequest 对象,它只会保存此次请求的信息。例如:放入购物车与购买付款是不同的请求,很显然数据没有得到很好的保存处理
  • 不能用 ServletContext 的原因:ServletContext对象是被整个web应用所共享的,将数据都存到这里,无疑会无法区分具体信息的归属

 

二、Cookie

1、概念

客户端会话技术,将数据保存到客户端

2、快速入门

使用步骤:

复制代码
创建Cookie对象,绑定数据
new Cookie(String name, String value)

发送Cookie对象
response.addCookie(Cookie cookie)

获取Cookie,拿到数据
Cookie[] request.getCookies()
复制代码

3、实现原理

基于响应头 set-cookie 和请求头 cookie 实现

4、Cookie 的细节

(1)一次可以发送多个cookie

可以创建多个 Cookie 对象,使用 response 调用多次 addCookie 方法发送 cookie 即可

(2)cookie在浏览器中保存的时间  

默认情况下,当浏览器关闭后,Cookie数据被销毁

持久化存储:

setMaxAge(int seconds)

正数:将Cookie数据写到硬盘的文件中;持久化存储。并指定 cookie 存活时间,时间到后,cookie 文件自动失效
负数:默认情况
零:删除 cookie 信息

 

(3)cookie能不能存中文

  • 在tomcat 8 之前 cookie 不能直接存储中文数据。

需要将中文数据转码:一般采用 URL 编码(%E3)

  • 在tomcat 8 之后,cookie 支持中文数据。

特殊字符(如:空格)还是不支持,建议使用 URL 编码存储,URL 解码解析

(4)cookie共享问题

a. 一个tomcat服务器中,部署了多个 web 项目,那么在这些 web 项目中 cookie 能不能共享?

  • 默认情况下cookie不能共享
  • setPath(String path)
  • 设置cookie的获取范围。默认情况下,设置当前的虚拟目录
  • 如果要共享,则可以将path设置为 "/"

b. 不同的 tomcat 服务器间能不能共享?

  • setDomain(String path)
  • 如果设置一级域名相同,那么多个服务器之间 cookie 可以共享
  • setDomain(“.baidu.com”)
  • 那么 tieba.baidu.com 和 news.baidu.com 中 cookie 可以共享

5、cookie 的特点和作用

(1)特点

  • cookie存储数据在客户端浏览器
  • 浏览器对于单个cookie 的大小有限制(4kb)以及 对同一个域名下的总 cookie 数量也有限制(20个)

(2)作用

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

 

三、案例:记住上一次访问时间

1、需求

访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问

如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串

2、分析

(1)可以采用Cookie来完成

(2)在服务器中的 Servlet 判断是否有一个名为 lastTime 的 cookie

  • 有:不是第一次访问

响应数据:欢迎回来,您上次访问时间为:2018年6月10日11:50:20

写回Cookie:lastTime=2018年6月10日11:50:01

  • 没有:是第一次访问

响应数据:您好,欢迎您首次访问

写回Cookie:lastTime=2018年6月10日11:50:01

 

Posted on   choco莉特  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示