码迷,mamicode.com
首页 > 其他好文 > 详细

Cookie & Session

时间:2020-09-12 21:31:04      阅读:31      评论:0      收藏:0      [点我收藏+]

标签:service   最大   amp   直接   date   iter   obj   客户端浏览器   会话   

会话技术

# 一次会话中包含多次请求和响应
  * 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止

# 功能:在一次会话的范围内的多次请求间,共享数据

# 方式:
  * 客户端会话技术:Cookie
  * 服务器端会话技术:Session

Cookie

快速入门

# 概念:客户端会话技术,将数据保存到客户端

# 使用步骤:
  * 创建 Cookie对象,绑定数据:new Cookie(String name, String value)
  * 发送 Cookie对象:response.addCookie(Cookie cookie)
  * 获取 Cookie,拿到数据:Cookie[ ] request.getCookies()

# 实现原理:
  * 基于响应头 set-cookie 和 请求头 cookie 实现

Cookie的细节

# 一次可不可以发送多个 Cookie?
  * 可以,创建多个 Cookie对象,使用 response调用多次 addCookie() 方法发送即可

# Cookie在浏览器中保存多长时间?
  * 默认情况下,当浏览器关闭后,Cookie数据被销毁
  * 持久化存储:setMaxAge(int seconds)
    * 正数:将 Cookie数据写到硬盘的文件中,持久化存储。并且指定 Cookie存活时间,时间到后,自动失效
    * 负数:默认值
    * 零:删除 Cookie信息

# Cookie能不能存储中文?
  * 在 Tomcat 8 之前 Cookie中不能直接存储中文数据
    * 需要将中文书籍转码,一般采用 URL编码 (%3)
  * 在 Tomcat 8 之后,Cookie支持中文数据,但是不支持特殊字符,建议还是使用URL编码存储和解析

# Cookie共享问题
  1)同一个 Tomcat服务器中,不同 web项目间,Cookie共享问题?
    * 默认情况下 Cookie不能共享
    * setPath(String path):设置 Cookie的获取范围,默认情况下位当前的虚拟目录
      * 如果要共享,则可以将 path设置为 "/"

  2)不同的 Tomcat服务器间,Cookie共享问题
    * setDomain(String path):如果设置一级域名相同,那么多个服务器之间 Cookie可以共享
      * 例如:setDomain(".baidu.com"),那么 tieba.baidu.com 和 news.baidu.com 中的 cookie可以共享

Cookie的特点和作用

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

# 作用:
  1)Cookie一般用于存储少量的不太敏感的数据
  2)在不登录的情况下,完成服务器对客户端的身份识别

案例

# 需求:
  1)如果是第一次访问,则提示:您好,欢迎您的首次访问
  2)如果不是第一次访问,则提示:欢迎回来,您上次的访问时间为:${时间字符串}$

# 分析:
  1)可以采用 Cookie来完成
  2)在服务器中的 Servlet判断是否有一个名为 lastTime 的 Cookie
    * 有:不是第一次访问
      ① 响应数据:欢迎回来:您上次访问的时间为:2020年8月31日16:37:40
      ② 写回 Cookie:lastTime = 2020年8月31日16:40:00
    * 没有:是第一次访问
      ① 响应数据:您好,欢迎首次访问
      ② 写回 Cookie:2020年8月31日16:37:40

# 代码实现

JSP

入门学习

# 概念:Java Server Pages:Java服务器端页面
  * 一个特殊的页面,其中既可以定义 HTML标签,也可以定义 Java代码
  * 可以简化书写

# 原理:JSP本质上就是一个 Servlet

# JSP脚本:JSP定义代码的方式
  * <% 代码 %>:定义的 Java代码 在service()方法中。
  * <%! 代码 %>:定义的 Java代码 在JSP跳转后的 Java类的成员位置
  * <%= 代码 %>:定义的 Java代码 会输出到页面上

# JSP的内置对象
  * 在 JSP页面中不需要获取和创建对象,可以直接使用
  * 重要的 3个对象:
    1)request
    2)response
    3)out:字符输出流对象,可以将数据输出到页面上,也 response.getWriter() 类型
      * 区别:在 Tomcat服务器给客户端作出响应前,会先找 response缓冲区数据,再找 out缓冲区数据,因此 getWriter() 数据输出永远在 out 前

# 案例:改造 Cookie案例

Session

快速入门

# 概念:服务器端会话技术,再一次会话的多次请求间共享数据,将数据保存在服务器端的对象中

# HttpSession对象
  * 获取 HttpSession:HttpSession session = request.getSession()
  * 使用 HttpSession:Object getAttribute(String name),void setAttribute(String name, Object value),void removeAttribute(String name)

# 原理:Session的实现是依赖于 Cookie的

细节

# 当客户端关闭后,服务器端不关闭,两次获取的 Session是否为同一个?
  * 默认情况下,不是
  * 如果要相同,可以创建 Cookie,键为 JSESSIONID,设置最大存活时间,让 Cookie持久化保存

# 客户端不关闭,服务器端关闭后,两次获取的 Session是否为同一个?
  * 不是同一个,但是为了数据不丢失,Tomcat自动完成以下工作
    * Session的钝化:在服务器正常关闭之前,将 Session对象序列化到硬盘上
    * Session的活化:在服务器启动后,将 Session文件转化为内存中的 Session对象

# Session什么时候被销毁?
  1)服务器被关闭
  2)Session对象调用 invalidate() 方法
  3)Session默认失效时间:30分钟

# Session的特点:
  * Session用于存储一次会话的多次请求的数据,存在服务器端
  * Session可以存储任意类型,任意大小的数据

# Session 和 Cookie的区别:
  1)Session存储数据在服务器端,Cookie存储在客户端
  2)Session没有数据大小的限制,Cookie有
  3)Session数据安全,Cookie相对不安全

案例

# 案例需求:
  1)访问带有验证码的登陆页面 login.html
  2)用户输入用户名,密码和验证码
    * 如果用户名或密码有误,跳转登录页面,提示:用户名或密码有误
    * 如果验证码输入有误,跳转登录页面,提示:验证码错误
    * 如果全部输入正确,则跳转到主页 success.jsp,提示:${用户名}$,欢迎您

 

Cookie & Session

标签:service   最大   amp   直接   date   iter   obj   客户端浏览器   会话   

原文地址:https://www.cnblogs.com/zhaochuming/p/13590538.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!