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

JavaWeb学习打卡11(session(会话)、cookie(甜点)详解)

Session(会话)

会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话。

有状态会话:一个学生来过教室,下次再来教室,我们会知道这个同学,曽经来过,称之为有状态的会话。

一个网站怎么证明你来过?

客户端          服务端

  1. 服务端给客户端一个信件,客户端下次访问服务端带上信件就可以了;  cookie
  2. 服务器登记你来过了,下次你来的时候我来匹配你;  seesion

保存会话的两种技术

cookie

  • 客户端技术 (响应,请求)

session

  • 服务器技术,利用这个技术,可以保存用户的会话信息,我们可以把信息或数据放在Session中

常见场景:网站登录之后,你下次不用再登录了,第二次访问直接就登录了

Cookie

  1. 从请求中拿到cookie信息
  2. 服务器响应给客户端cookie

cookie常用的方法:

Cookie[] cookies = req.getCookies(); //获得cookie
cookie.getName();  //获得cookie中的key
cookie.getValue(); //获得cookie中的vlaue
new Cookie("lastLoginTime", System.currentTimeMillis()+""); //新建一个cookie
cookie.setMaxAge(24*60*60);  //设置cookie有效期为24小时
resp.addCookie(cookie);//将cookie 响应回客户端

cookie 常用方法的使用:

package com.xu.cookie;import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;public class CookieDemo01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//服务器告诉你,你来的时间,把这个时间封装成为也给信件 , 你下次带来,我就知道你来了//先解决中文乱码问题req.setCharacterEncoding("utf-8");// 如果写 resp.setCharacterEncoding("utf-8");还是显示乱码,就将resp 代码改为:resp.setContentType("text/html;charset=utf-8");resp.setContentType("text/html;charset=utf-8");//创建一个输出流对象PrintWriter out = resp.getWriter();//Cookie,是服务端从客户端获取的Cookie[] cookies = req.getCookies();//这里是返回数组,说明Cookie可能存在多个//判断Cookie 是否存在if(cookies!= null){  //判断Cookie 不为空, 则不是第一次访问//cookie 存在out.write("你上次访问的时间是:");for (int i = 0; i < cookies.length; i++) {Cookie cookie = cookies[i];//获取cookie 的名字if (cookie.getName().equals("lastLoginTime")){//获取cookie 中的值long lastLoginTime = Long.parseLong(cookie.getValue());Date date = new Date(lastLoginTime);out.write(date.toLocaleString());}}}else {out.write("这是您第一次访问本站");}//服务端给客户端响应(发送)一个cookie//先new一个cookie ,name为:lastLoginTime  ;value为:最后一次访问的时间戳Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+"");//设置cookie有效期为一天cookie.setMaxAge(24*60*60);resp.addCookie(cookie);//将cookie 响应回客户端}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

web.xml 文件配置servlet :

    <servlet><servlet-name>CookieDemo01</servlet-name><servlet-class>com.xu.cookie.CookieDemo01</servlet-class></servlet><servlet-mapping><servlet-name>CookieDemo01</servlet-name><url-pattern>/c1</url-pattern></servlet-mapping>

运行结果:

cookie:一般会保存到本地的 用户目录下  appdata 

一个网站cookie 是否存在上限!

  • 一个Cookie只能保存一个信息;
  • 一个web站点可以给浏览器发送多个cookie,
  • cookie大小限制:4kb
  • 浏览器的上限:300个cookie

删除Cookie:

  • 不设置有效期,关闭浏览器,自动失效;
  • 设置有效期时间为 0 ;

删除Cookie代码实现:

package com.xu.cookie;import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class CookieDemo02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//创建一个cookie , 名字必须要和要删除的名字一致Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");//将cookie有效期设置为 0 ,立马过期cookie.setMaxAge(0);//将cookie响应回客户端resp.addCookie(cookie);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}

在web.xml 文件中配置servlet:

<!--    配置CookieDemo02--><servlet><servlet-name>CookieDemo02</servlet-name><servlet-class>com.xu.cookie.CookieDemo02</servlet-class></servlet><servlet-mapping><servlet-name>CookieDemo02</servlet-name><url-pattern>/c2</url-pattern></servlet-mapping>

运行结果:

解决中文乱码问题:

        //编码中文URLEncoder.encode("小许","utf-8");//解码中文URLDecoder.decode(cookie.getValue(),"utf-8");
http://www.dtcms.com/a/291850.html

相关文章:

  • 云服务器进行安全防护的必要性
  • [C++11]范围for循环/using使用
  • 录音智能转写:如何实现一键转写、灵活下载!
  • Kubernetes服务发布基础
  • 【C语言进阶】枚举和联合
  • thinkbook14+指针消失的解决方法 + Windows常见快捷键
  • 四大组件:ContentProvider学习
  • linux用户态各定时器抖动测试
  • java day16
  • Vue开发常用
  • rk平台(rv1126/rk3588)音视频-交叉编译FFmpeg7.1
  • 如何迁移jenkins至另一台服务器
  • 服务器无法访问公网的原因及解决方案
  • 简单了解下npm、yarn 和 pnpm 中 add 与 install(i) 命令的区别(附上两图带你一目明了)
  • nodejs的npm
  • 技术与情感交织的一生 (十)
  • 最新基于R语言结构方程模型分析与实践技术应用
  • Apache Ignite 的 SQL 功能和分布式查询机制
  • Apache Ignite 中事务的使用方式和机制
  • 短剧小程序系统开发:重塑影视内容传播格局
  • LIMO:仅需817样本激活大模型数学推理能力,挑战“数据规模至上”传统范式
  • Axios 二次封装
  • PHP中的异常处理与自定义错误页面
  • EasyGBS算法仓:找算法,变成 “点一下” 的事!
  • 使用 Conda 工具链创建 UV 本地虚拟环境全记录——基于《Python 多版本与开发环境治理架构设计》
  • Docker实战:使用Docker部署TeamMapper思维导图工具
  • 推送git问题_查询索引文件——查导致的文件
  • 按键精灵脚本:自动化利刃的双面性 - 从技术原理到深度实践与反思
  • windows10安装node-v18.18.0-x64安装
  • async/await 函数