当前位置: 首页 > ai >正文

javaweb-cook-会话

Cookie概述与应用

      在很多WEB应用中,我们都需要对用户的会话进行跟踪,需要记录用户的状态,比如商城中用户将商品添加到购物车,商城必须能识别哪些会话是属于同一个用户,既是哪些客户端添加了哪些商品,不能出现,A用户的客户端添加的商品跑到B用户客户端的购物车里头!

在Servlet技术中,有两种机制可以实现这种对会话的跟踪:
①Cookie机制:放在客户端
②Session机制:放在服务器端

1.Cookie

      Cookie技术是客户端的解决方案,当用户使用浏览器访问一个支持Cookie的网站的时候,一个cookie的运行过程分为以下四步:
在这里插入图片描述
      当客户端浏览器接收到来自服务器的响应之后,浏览器会将这些信息存放在一个统一的位置,对于Windows操作系统而言,IE浏览器的Cookie 放在:[系统盘]:\Users\用户名\Cookies目录中;
            通常,我们可以从很多网站的登录界面中看到“请记住我”这样的选项,如果你勾选了它之后再登录,那么在下一次访问该网站的时候就不需要进行重复而繁琐的登录动作了,而这个功能就是通过Cookie实现的。
      其实本质上cookies就是http的一个扩展。有两个http头部是专门负责设置以及发送cookie的,它们分别是Set-Cookie以及Cookie。其中如果包含Set-Cookie这个头部时,意思就是指示客户端建立一个cookie,并且在后续的http请求中自动发送这个cookie到服务器端,直到这个cookie过期。如果cookie的生存时间是整个会话期间的话,那么浏览器会将cookie保存在内存中,浏览器关闭时就会自动清除这个cookie。另外一种情况就是保存在客户端的硬盘中,浏览器关闭的话,该cookie也不会被清除,下次打开浏览器访问对应网站时,这个cookie就会自动再次发送到服务器端。

      Java中把Cookie封装成了javax.servlet.http.Cookie类。每个Cookie都是该Cookie类的对象。服务器通过操作Cookie类对象对客户端Cookie进行操作。通过response.addCookie(Cookie cookie)向客户端设置Cookie,通过request.getCookie()获取客户端提交的所有Cookie(以Cookie[]数组形式返回)。
例:创建cookie,我们怕与session会话对象冲突,在页面page中,设置session=“false”
*注:session="false"对360无效,我是微软的Edge上云行,这里有作用。

<%@ page language="java" session="false" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>cookie Test</title>
</head>
<body><%Cookie cookie=new Cookie("uuid","uuidvalue");response.addCookie(cookie);%>
</body>
</html>

在这里插入图片描述
例:获取cookie值,并打印在浏览器上,cookie对象默认关闭浏览器就清除

<body><%Cookie[] cookieArr = request.getCookies();if(cookieArr!=null && cookieArr.length>0){for(int i=0;i<cookieArr.length;i++){out.println("Cookie的名字:"+cookieArr[i].getName());out.println("Cookie的值:"+cookieArr[i].getValue());}}else{Cookie cookie=new Cookie("uuid","uuidvalue");response.addCookie(cookie);}%>
</body>

在这里插入图片描述

Cookie对象里的属性(每个属性都有set和get方法):

我只用1,2,3,其它都没有用过。

①String name:该Cookie的名称。Cookie一旦创建,名称便不可更改。
②String value:该Cookie的值。
③int maxAge:该Cookie失效的时间,单位秒。(如果为正数,则该Cookie在>maxAge秒之后失效。如果为负数,该Cookie为临时Cookie,关闭浏览器即失效,浏览器也不会以任何形式保存该Cookie。如果为0,表示删除该Cookie。默认为–1。)
④boolean secure:该Cookie是否仅被使用安全协议传输。默认为false。 
⑤String path:该Cookie的使用路径。如果设置为“/sessionWeb/”,则只有contextPath为“/sessionWeb”的程序可以访问该Cookie。如果设置为“/”,则本域名下contextPath都可以访问该Cookie。注意最后一个字符必须为“/”。
⑥String domain:可以访问该Cookie的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该Cookie。注意第一个字符必须为“.”。
⑦String comment:该Cookie的用处说明。
⑧ int version:该Cookie使用的版本号。0表示遵循Netscape的Cookie规范,1表示遵循W3C的。

例:设置过期时间,10秒,打开浏览器,运行一下locahost:8081/mvcproject/cookie.jsp,再刷新一下,可看到网页上打印cookie名与值,过10秒再刷新一下,没有东东了。

<body><%Cookie[] cookieArr = request.getCookies();if(cookieArr!=null && cookieArr.length>0){for(int i=0;i<cookieArr.length;i++){out.println("Cookie的名字:"+cookieArr[i].getName());out.println("Cookie的值:"+cookieArr[i].getValue());}}else{Cookie cookie=new Cookie("uuid","uuidvalue");cookie.setMaxAge(10);    //保存10秒自动清除,不设置时间,默认(-1)关闭浏览器就清除response.addCookie(cookie);}%>
</body>

在这里插入图片描述
过了10秒再刷新,没东西了
在这里插入图片描述

http://www.xdnf.cn/news/2015.html

相关文章:

  • 力扣热题——统计最大组的数目
  • 黑马Redis(三)黑马点评项目
  • 【昇腾】【训练】800TA2-910B使用LLaMA-Factory训练Qwen
  • 系统架构师2025年论文《微服务架构3》
  • 软件开发管理制度,项目研发制度,项目管理制度
  • 解决Spring Boot多模块自动配置失效问题
  • 如何把两个视频合并成一个视频?无需视频编辑器即可搞定视频合并
  • 【Java面试笔记:进阶】19.Java并发包提供了哪些并发工具类?
  • linux基础操作1------(文件命令)
  • STM32系列官方标准固件库的完整下载流程
  • MySql 数据 结构 转为SqlServer (简单)
  • WSL2-自定义安装
  • LLM数学推导——Transformer问题集——注意力机制——稀疏/高效注意力
  • Kafka与Spark-Streaming
  • 7.0 sharpScada的sql数据的安装
  • Oracle Recovery Tools修复ORA-00742、ORA-600 ktbair2: illegal inheritance故障
  • ubuntu使用dify源码安装部署教程+避坑指南
  • 系统架构-安全架构设计
  • PS读写BRAM
  • 【从零开始:自制一个Java消息队列(MQ)】
  • Ubuntu18.04更改时区(图文详解)
  • 二叉树的遍历(深度优先搜索)
  • 如何确保微型导轨的质量稳定?
  • 【FAS】《Face Detection Algorithm Based on Lightweight Network and Near Infrared》
  • 张 LLM提示词拓展16中方式
  • 安卓 Compose 相对传统 View 的优势
  • Python常见报错及解决方法,包含示例代码
  • 20250418-vue-作用域插槽
  • MySQL 详解之备份与恢复策略:数据安全的最后一道防线
  • BT151-ASEMI无人机专用功率器件BT151