Servlet第六篇【Session介绍、API、生命周期、应用、与Cookie区别】(四)

简介: Session 是另一种记录浏览器状态的机制。不同的是Cookie保存在浏览器中,Session保存在服务器中。用户使用浏览器访问服务器的时候,服务器把用户的信息以某种的形式记录在服务器,这就是Session

浏览器禁用了Cookie,Session还能用吗?

上面说了Session是依靠Cookie来识别用户浏览器的。如果我的用户浏览器禁用了Cookie了呢?绝大多数的手机浏览器都不支持Cookie,那我的Session怎么办?

48.jpg

好的,我们来看看情况是怎么样的。用户浏览器访问Servlet4的时候,服务器向用户浏览器颁发了一个Cookie

49.jpg

但是呢,当用户浏览器访问Servlet7的时候,由于我们禁用了Cookie,所以用户浏览器并没有把Cookie带过去给服务器

50.jpg

  • 一看,Session好像不能用了。但是Java Web提供了解决方法:URL地址重写
  • HttpServletResponse类提供了两个URL地址重写的方法:
  • encodeURL(String url)
  • encodeRedirectURL(String url)
  • 需要值得注意的是:这两个方法会自动判断该浏览器是否支持Cookie,如果支持Cookie,重写后的URL地址就不会带有jsessionid了【当然了,即使浏览器支持Cookie,第一次输出URL地址的时候还是会出现jsessionid(因为没有任何Cookie可带)】
  • 下面我们就以上面“购物”的例子来做试验吧!首先我们来看看禁用掉Cookie对原来的小例子有什么影响
  • 访问Servlet1,随便点击一本书籍购买

51.jpg

无论点击多少次,都会直接提示我们有买过任何商品

52.jpg

  • 原因也非常简单,没有Cookie传递给服务器,服务器每次创建的时候都是新的Session,导致最后获取到的List集合一定是空的。
  • 不同Servlet获取到的Session的id号都是不同的

53.jpg

  • 下面我们就对URL进行重写,看看能不能恢复没有禁掉Cookie之前的效果。
  • 原则:把Session的属性带过去【传递给】另外一个Servlet,都要URL地址重写
  • 在跳转到显示购买过商品的Servlet的时候,URL地址重写。
  String url = "/ouzicheng/Servlet7";
        response.sendRedirect(response.encodeURL(url));

再次访问Servlet1,当我点击javaweb的时候,已经能够成功出现我买过的商品了。并且Session的id通过URL地址重写,使用的是同一个Session

54.jpg

55.jpg

URL地址重写的原理:将Session的id信息重写到URL地址中。服务器解析重写后URL,获取Session的id**。这样一来,即使浏览器禁用掉了Cookie,但Session的id通过服务器端传递,还是可以使用Session来记录用户的状态。

目录
相关文章
|
安全 测试技术 API
优化 API 生命周期的 5 个关键领域
您是否曾遇到过令人沮丧的 API 文档?或为版本控制问题而苦恼?或为集成难题而苦恼?这些只是困扰 API 开发领域的一些常见挑战。
|
Java 应用服务中间件 数据库连接
探索研究Servlet 生命周期
【9月更文挑战第22天】
178 7
|
监控 API 数据安全/隐私保护
2024年开源API工具盘点,覆盖API全生命周期
2024年经济持续低迷,本文整理一些免费的开源工具,旨在帮助企业组织降低工具的支出成本,能用免费的何必用付费的呢(狗头)?
562 0
|
存储 Java 关系型数据库
基于Servlet和JSP的Java Web应用开发指南
【6月更文挑战第23天】构建Java Web应用,Servlet与JSP携手打造在线图书管理系统,涵盖需求分析、设计、编码到测试。通过实例展示了Servlet如何处理用户登录(如`LoginServlet`),JSP负责页面展示(如`login.jsp`和`bookList.jsp`)。应用基于MySQL数据库,包含用户和图书表。登录失败显示错误信息,成功后展示图书列表。部署到Tomcat服务器测试功能。此基础教程为深入Java Web开发奠定了基础。
297 10
|
缓存 负载均衡 安全
Servlet与JSP在Java Web应用中的性能调优策略
【6月更文挑战第23天】在Java Web中,Servlet和JSP调优至关重要,以应对高并发和复杂业务带来的性能挑战。优化包括Servlet复用、线程安全、数据库连接池,以及JSP的编译优化、使用JSTL、页面缓存和静态内容分离。全局优化涉及负载均衡、异步处理和缓存策略。通过这些实践,开发者能提升应用响应速度和吞吐量,确保高负载下的稳定运行。
300 7
|
Java 数据库连接 开发者
Java中的Servlet生命周期详解
Java中的Servlet生命周期详解
|
前端开发 应用服务中间件
servlet执行流程&生命周期
servlet执行流程&生命周期
|
Java 数据库连接 开发者
Java中的Servlet生命周期详解
Java中的Servlet生命周期详解
|
XML 存储 前端开发
JavaEE:Servlet创建和使用及生命周期介绍
JavaEE:Servlet创建和使用及生命周期介绍
169 0