Web开发之Cookie
目录
- 会话跟踪技术
- `Cookie` 概述
- `Cookie` 的简单使用
- `Cookie` 细节
- `Cookie` 的覆盖
- `Cookie` 有效期
- `Cookie` 修改和删除
- `Cookie` 与跨域问题
会话跟踪技术
会话可以简单的理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应。例如,用户在某个浏览器中访问某一个 Web
应用,只要不关闭该浏览器,不管该用户点击该 Web
应用的多少个超链接,访问多少资源,直到关闭浏览器之前,整个的这个访问过程我们称为一次会话
在一个会话的多个请求中共享数据,这就是会话跟踪技术。会话跟踪技术可以解决我们很多问题。比如最常见的就是一个用户在登陆一个网站之后,请求该网站的其他页面和资源时免登录的功能,又比如购物网站中常见的显示曾经浏览过的商品的功能,又比如某些购物网站允许未登录用户可以添加商品到临时购物车中的功能
常见的会话跟踪技术有 Cookie
和 Session
,Cookie
是先出现的
Cookie
概述
由于 HTTP
是一种无状态的协议,但为了实现期望的保持状态功能,于是引入了 Cookie
技术。Cookie
技术通过在请求和响应报文中写入 Cookie
信息来控制客户端的状态
简单的说:Cookie
是由服务器创建,然后通过响应发送给客户端的一个键值对,这个键值对中包含了要该会话想要记住的状态信息,客户端会保存这个 Cookie
,并会标注出 Cookie
的来源(哪个网站的 Cookie
)。当客户端再一次向该网站发出请求时会把所有这个网站的 Cookie
包含在请求报文头中发送给服务器,这样服务器就可以根据该请求携带的 Cookie
信息识别客户端,并且得到之前的状态信息了
第一次,没有 Cookie
信息状态下的请求
第二次开始,存有 Cookie
信息状态的请求
Cookie
的简单使用
在 Java
的 Servlet
规范中,可以非常简单的设置和获取 Cookie
,Cookie
被抽象成为一个 Cookie
类
- 当要设置
Cookie
的时候,需要创建Cookie
对象并且设置key
和value
,随后通过response
响应对象的addCookie()
方法添加这个Cookie
即可,Web
服务器会自动将response
中的Cookie
发送给客户端 - 客户端在随后对该
Web
应用的其他资源进行访问的时候,将会自动带上服务器发送的Cookie
(同一个服务器的其他Web
应用也不会发送)
@WebServlet("/cookie-servlet")
public class CookieServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=utf-8");// 生成一个随机字符串String id = UUID.randomUUID().toString();// 创建Cookie对象,指定名字和值。Cookie类只有这一个构造器Cookie cookie = new Cookie("id", id);// 在响应中添加Cookie对象resp.addCookie(cookie);resp.getWriter().print("已经给你发送了ID");}
}
在访问 /hello-servlet
资源时,用于测试 Cookie
,该 Servlet
中通过 request
请求对象的 getCookies()
方法获取 Cookie
@WebServlet("/hello-servlet")
public class HelloServlet extends HttpServlet {@Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {Cookie[] cookies = request.getCookies();// 如果请求中存在Cookieif (cookies != null) {// 遍历所有Cookiefor (Cookie c : cookies) {// 获取Cookie名字,如果Cookie名字是idif ("id".equals(c.getName())) {response.getWriter().print("您的ID是:" + c.getValue());}}}}
}
Cookie
细节
Cookie
的覆盖
如果服务器端多次发送重复 key
的 Cookie
,那么后发送的 Cookie
会覆盖原有的 Cookie
,例如客户端的第一个请求服务器端发送的 Cookie
是:Set-Cookie: a=A
;第二请求服务器端发送的是:Set-Cookie: a=AA
,那么客户端只留下一个 Cookie
,即:a=AA
如果服务器端一次发送多个重复 key
的 cookie
,那么当客户端再次请求的时候,只携带最后一个设置的 Cookie
的值
Cookie
有效期
所谓 Cookie
的有效期就是 Cookie
在客户端的最大有效时间,我们可以通过 setMaxAge(int)
方法来设置 Cookie
的有效时间,单位秒
cookie.setMaxAge(-1)
:cookie
的maxAge
属性的默认值是-1
,表示只在浏览器内存中存活。一旦关闭浏览器窗口,那么cookie
就会消失。生命值为负数的Cookie
也被称为内存Cookie
cookie.setMaxAge(60*60)
:表示cookie
对象可存活1
小时。当生命值大于0
时,浏览器会把Cookie
保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie
也会存活1
小时,除非将Cookie
从硬盘上手动清理了。生命值为正数的Cookie
也被称为硬盘Cookie
cookie.setMaxAge(0)
:cookie
生命值等于0
是一个特殊的值,它表示cookie
被作废。也就是说,如果原来浏览器已经保存了这个Cookie
,那么可以通过Cookie
的setMaxAge(0)
来要求浏览器删除这个Cookie
。无论是在浏览器内存中,还是在客户端硬盘上都会删除这个Cookie
Cookie
修改和删除
Cookie
并没有提供直接的修改和删除功能,但是根据前面 Cookie
的覆盖和有效期属性,可以间接的修改和删除 Cookie
当想要修改 Cookie
时,可以发送同名 key
的 Cookie
,这样以前的旧 Cookie
就被覆盖了。当想要删除 Cookie
时,同样设置同名 key
的 Cookie
的 maxAge = 0
即可
Cookie
与跨域问题
默认情况下,不同的域名中设置的 Cookie
不可以共享,即跨域问题
cookie
有一个 setDomain()
方法,可以设置 Cookie
的 domain
属性(域名),表示 Cookie
在域名级别中的作用范围。如果不设置,那么默认范围就是当前域名
Web开发之Cookie相关推荐
- web开发之Cookie使用
做过web开发的小伙伴对于Cookie一定不陌生,当用户登录后将用户的账号保存到本地,密码保存时,建议使用MD5进行加密,以防止用户个人信息的泄露.今天和大家简单聊聊关于Jquer Cookie的使用 ...
- 移动web开发之rem布局(rem基础、媒体查询、 less 基础、rem适配方案)
移动web开发之rem布局 一.rem基础 rem单位 rem (root em)是一个相对单位,类似于em,em是父元素字体大小. 不同的是rem的基准是相对于html元素的字体大小. 比如,根元素 ...
- 17. 【移动Web开发之flex布局】
文章目录 [移动Web开发之flex布局]前端小抄(17) 一.flex布局体验 1.1 传统布局与flex布局 1.2 初体验 二.flex布局原理 2.1 布局原理 三.flex布局父项常见属性 ...
- 「学习笔记」移动Web开发之flex布局9
「学习笔记」移动Web开发之flex布局9 一.flex布局体验 1.1 传统布局与flex布局 1.2 初体验 二.flex布局原理 2.1 布局原理 三.flex布局父项常见属性 3.1 常见父项 ...
- WEB开发之HTML与CSS够用即可-庞永旺-专题视频课程
WEB开发之HTML与CSS够用即可-113人已学习 课程介绍 讲解常用的HTML标签与CSS样式.这些常用的HTML标签与CSS样式都是本人多年从业经验的总结.只要熟练我总结的HTM ...
- 移动WEB开发之-REM(rem)布局
目录 移动WEB开发之REM布局 rem基础 rem单位 媒体查询 什么是媒体查询 媒体查询语法规范 1.mediatype 查询类型 2.关键字 3.媒体特性 4.媒体查询书写规则 less 基础 ...
- Python Web开发之WSGI
Python Web开发之WSGI WSGI(全称Web Server Gate Interface,Web服务器网关接口)是Python为了规范和简化Web服务开发过程,定义了一种Web服务器和应用 ...
- Swift Web 开发之 Vapor - 入门(一)
简介 Vapor 是一个基于纯 Swift 构建出的 Web 开发框架,目前可以运行在 macOS 和 Ubuntu ,用于构建出漂亮易用的网站或者 API 服务. 官方称是用的最多的 Swift w ...
- Swift Web 开发之 Vapor - 模版 Leaf(三)
模版引擎,对现在的 Web 开发极为重要,几乎所有主流 Web 框架都会支持一种或多种模版引擎,模版引擎可以分离用户界面和业务逻辑,工作原理主要是一种翻译,后端对特定的标记.语法.变量等渲染后再输送给 ...
- 18. 【移动Web开发之rem适配布局】
文章目录 [移动Web开发之rem适配布局]前端小抄(18) 一.rem单位 1.1 rem 单位 二.媒体查询 2.1 什么是媒体查询 2.2 语法规范 2.2.1 mediatype 查询类型 2 ...
最新文章
- 基于固态激光雷达Livox的建图与定位系统!提供Docker自测!
- Java ArrayDeque工作原理及实现
- Leetcode 100. 相同的树 解题思路及C++实现
- AI:一个20年程序猿的学习资料大全—人工智能之AI/机器学习/深度学习/计算机视觉/Matlab大赛——只有你不想要的,没有你找不到的
- docker mysql 不稳定_docker 的 mysql 容器运行一段时间后崩溃
- 串口调试助手-打开报错
- SAP Commerce Cloud B2B Organization 功能简介
- java 死锁的检测与修复_调查死锁–第4部分:修复代码
- 【李宏毅2020 ML/DL】P77 Generative Adversarial Network | Theory behind GAN
- 批量传输mysql的表空间_MySQL 表空间传输
- 软件著作权申请流程(自助申请免费登记)
- cad汉仪长仿宋体_hzcf.shx字体下载
- Java十大常用框架介绍
- Android Wi-Fi 2.4G及5G信道一览表
- VMware安装CentOS 7.0 Fail to start media check on /dev/sr0
- 新加坡国立大学计算机学院师资,我系教师刘志刚赴新加坡国立大学访学
- unity给物体更改颜色
- 98% after emitting CopyPlugin问题
- 不能打开淘宝单个商品页面
- 专访凌云光技术3D视觉业务部经理李淼:做好技术和产品,为VR行业服务
热门文章
- 381.O(1)时间插入、删除和获取随机元素-允许重复
- 375.猜数字大小II
- JSP标签,jsp:include,jsp:forward用法介绍及示例
- 用Theano学习Deep Learning(三):卷积神经网络
- unity 入门学习之(二)脚本学习
- 【ZOJ 4097 The 19th Zhejiang University Programming Contest H】Rescue the Princess【边双连通缩点+LCA】
- mysql给日期创建索引_如何在MySql的DATETIME字段的日期部分创建索引
- Raki的读paper小记:ALBERT: A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS
- Raki的统计学习方法笔记0x2章:感知机
- 68.x的平方根(力扣leetcode) 博主可答疑该问题