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

day17_cookie_webstorage - 详解

day17_cookie_webstorage

浏览器中需要有存储数据的技术 从而释放服务端的存储压力

1.cookie

1.1cookie特点

1 存在浏览器中

2 按域(domian 域名) 存储

3 存储键值对 key value 都是字符串

4 cookie有有效期 超过存储的有效期会失效

注意: cookie存在浏览器中 用户可以阻止cookie 也可以删除cookie 所以不要存关键数据

1.2cookie读写操作
通过服务端代码读写

写cookie例子

package com.javasm.controller;
​
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
​
/*** @className: CookieWriteDemo* @author: gfs* @date: 2025/10/23 9:50* @version: 0.1* @since: jdk17* @description:*/
@WebServlet("/writeDemo")
public class CookieWriteDemo extends HttpServlet {
​   @Override   protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {       System.out.println("cookie write......");       Cookie cookie = new Cookie("ckkey", "rose");       //path 设置到根 保证cookie唯一性       //根据key + path 保证唯一性       cookie.setPath("/");       //设置过期时间       //默认有效期 会话 session 关闭浏览器失效       //cookie.setMaxAge(60*60*24);   正整数 按秒算有效期       //cookie.setMaxAge(0);          0     设置cookie失效       //cookie.setMaxAge(-1);         -1    恢复默认值 关闭浏览器自动失效       //响应报文中 出现set-cookie 让浏览器写cookie数据       resp.addCookie(cookie);
​   }
}
​

读cookie例子

package com.javasm.controller;
​
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
​
/*** @className: CookieWriteDemo* @author: gfs* @date: 2025/10/23 9:50* @version: 0.1* @since: jdk17* @description:*/
@WebServlet("/readDemo")
public class CookieReadDemo extends HttpServlet {
​   @Override   protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {       System.out.println("cookie read......");       Cookie[] cookies = req.getCookies();       //根据报文生成的新的cookie对象 只有key value 其他参数都没有       for(Cookie ck: cookies){           System.out.println(ck.getName()+"---"+ck.getValue());           if("ckkey".equals(ck.getName())){               //同key 同 path               ck.setValue("jack");               ck.setPath("/");               resp.addCookie(ck);           }
​       }
​   }
}
​
​
注意: 读+写时 需要通过key+path 保证是同一条cookie

1.3cookie与session的区别

session的实现依赖cookie cookie被禁用 session也不能正常使用

/*       * 1 访问到服务端时 服务器会判断是否有浏览器的session对象       *   根据cookie中的key JSESSIONID       * 2 如果没有 创建一个Session对象 把session存在服务器中       *   Map               session编号    session对象           会自动写响应头 set-cookie 让浏览器存储 JSESSIONID session编号       * 3 后续访问过程中 如果读到 有JSESSIONID       *   根据其中的session编号 从map中找到与之对应的session对象       *       * 4 JSESSIONID 有效期是 会话(关闭浏览器 自动清除)       *   再次访问时 找不到之前session对象 所以要重新创建       *       * */

1.4js直接操作cookie(了解)
      Title         <script>
​   /*   * js中以字符串方式 操作cookie   *  读写都不太方便   *   * */
​   const setCookie = ()=>{      //赋值 写cookie       document.cookie = `jskey=roser123;path=/;expires=${new Date(new Date().getTime()+60*60*24*10*1000) }`   }   const setCookie2 = ()=>{       //赋值 写cookie       document.cookie = `jskey=roser123;path=/;expires=${new Date('1999-11-11 11:11:11')} `   }
​   const getCookie = ()=>{       //读取到有格式的字符串  如果要操作某个cookie的值 需要手动解析       //test=123321; ckkey=jack; jskey=jsval       console.log(document.cookie)       //赋值 写cookie       // = `jskey=jsval;path=/;expires=${new Date(new Date().getTime()+60*60*24*10*1000) }`       console.log(localStorage.getItem("name"))       console.log(sessionStorage.name)
​       console.log(JSON.parse(localStorage.myJson) )
​
​   }
​
​
</script>

2WebStorage

两个对象

localStorage 无限期长期存储

sessionStorage 关闭浏览器自动失效

1 按域(domain 域名)存储

2 存储键值对 类型字符串

3 读写操作API简单好用

      Title

<script>
​   /*   *  localStorage    长期存储   *  sessionStorage  临时存储 关闭浏览器失效   *   * 写操作   * localStorage.name = "abc123"     sessionStorage.setItem("name","jack")   *   * 读操作   *  console.log(localStorage.getItem("name"))      console.log(sessionStorage.name)   *   * 删除操作   *  localStorage.removeItem("name")   删单个       sessionStorage.clear()           全删   *   * 结合json使用   * 需要转成json字符串存取   *  //只能放json格式字符串       localStorage.myJson = JSON.stringify({name:'jack',age:15})      //读取时需要json对象 需要做转换       console.log(JSON.parse(localStorage.myJson) )   *   *   * */
​   const setStorage = ()=>{       localStorage.name = "abc123"       sessionStorage.setItem("name","jack")
​
​   }   const setCookie2 = ()=>{       localStorage.removeItem("name")       sessionStorage.clear()   }
​   const setStorage3 = ()=>{       //只能放json格式字符串       localStorage.myJson = JSON.stringify({name:'jack',age:15})       //读取时需要json对象 需要做转换       console.log(JSON.parse(localStorage.myJson) )   }
​   const getStorage = ()=>{       console.log(localStorage.getItem("name"))       console.log(sessionStorage.name)
​       console.log(JSON.parse(localStorage.myJson) )
​
​   }
​
​
</script>

总结:

1如果浏览器存了数据 需要在后端读取 使用cookie

2如果浏览器存了数据 只在前端读写使用(跨页面共享) webStorage

登录 主菜单功能

1 画流程图

2sql分析

建表 创建数据 写sql

-- 粗糙报错 不能登录
select * from admin_user where username = 'wangshaocheng' and `password` = 'abc123' and isvalid = 1
-- 详细报错
select * from admin_user where username = 'wangshaocheng'
-- 其他字段通过java代码检查和匹配 根据匹配结果 报详细的错误信息
​
​
-- 登录成功 更新最后登录时间
update admin_user set login_time = NOW() where uid = 3
​
​
-- 读取不同用户的菜单信息 需要父子关系
select am2.*,  am1.mid as submid,am1.menuname as submenuname,am1.url as suburl 
from rel_admin_user_menu rum inner join admin_menu am1 on rum.mid = am1.midinner join admin_menu am2  on am1.pid = am2.mid
​
where uid = 3

http://www.jsqmd.com/news/56134/

相关文章:

  • 【源码解读之 Mybatis】【核心篇】-- 第8篇:ResultSetHandler结果集处理
  • [KaibaMath]1030 关于f(x)=2^x-4x在[3, +∞)上单调递增的证明
  • 2025年佛山地区桶装水配送服务商推荐:比较好的桶装水送水电
  • 2025年中国十大知名的活动策划企业推荐:诚信的活动策划企业
  • tts服务
  • 2025年高温测试机构推荐与高温实验机构排名,高温试验品牌企
  • 2025年高温测试机构推荐与高温实验机构排名,高温试验品牌企
  • 2025年十大接地箱定制生产厂家排行榜,专业的接地箱厂家推荐
  • KFCoder - 敏捷冲刺日志-1st
  • 自动驾驶中的传感器技术75——Navigation(12) - 详解
  • Spring AI实现一个简单的对话机器人
  • 惠算科技 GEO 优化优选惠州本地生活推荐:生成式引擎优化时代的本地商家获客破局指南
  • Genie 2:大规模基础世界模型的技术突破
  • 薄壁镀锌方管生产厂TOP5权威推荐:服务不错的镀锌方管工厂甄
  • 翻译
  • Xcode26新特性与iOS26适配指南
  • 鸿蒙开发中,module.json5配置文件详解
  • 茶叶商标购买平台指南:2025 哪个平台最好?从标源到过户一文说透
  • 2025年智能机械设备研发加工厂哪家更值得选?智能机械设备源
  • 2025年十大专业检测仪器公司排行榜,北京时代光南检测技术有
  • 2025年十大讲解机器人供应企业排名,讲解机器人哪家好
  • 2025年全国无损检测仪器服务商年度排名:北京时代光南检测技
  • 字节跳动在GitHub上有哪些开源项目
  • 跨端开发框架横评(跨平台前端框架)
  • 全自动分液站在实验室自动化中的关键作用与性能解析 - 详解
  • 2025年11月学习机榜单公布:十大机型数据说话,告别智商税
  • TreeView 控件介绍
  • 自助ktv加盟谁家靠谱:甄选高性价比品牌,助力创业者轻松入局
  • 美术高中推荐:热门美术高中哪家合适?美术高中服务哪家好?甄选
  • esbuild的作者