[ServletJSP] Cookie会话管理

2024-06-05 08:38

本文主要是介绍[ServletJSP] Cookie会话管理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

web应用程序的请求与响应是基于HTTP的,为无状态的通信协议,服务器不会记得这次请求与下一次请求的关系。,然而有些功能必须由多次请求来完成,例如购物车,用户可能在多个购物网页之间采购商品,web应用程序必须有个方式来得知用户在这些网页中采购了哪些商品,这种记得此次请求与之后请求间关系的方式,就称为会话管理(Session Management)。

隐藏字段的使用

使用隐藏字段,可以将上一次请求的参数用隐藏字段的方式返回到下一页窗体中,如此发送下一页窗体时,就可以一并发送这些隐藏字段,每一页的参数就可以保留下来。

使用隐藏字段的方式,在关掉网页之后,就会遗失先前请求的信息,所以这种方式仅适合用于一些简单的状态管理,像是在线问卷。由于在查看页面源代码时,就可以看到隐藏字段的值,因此这个方法不适合于隐秘性较高的数据。隐藏字段不是Servlet/JSP实际会话管理时的机制,这里主要是为了说明由浏览器主动告知必要的信息,为实现web应用程序会话管理的基本原理。

Cookie的使用

web应用程序会话管理的基本方式,就是在此次请求中,将下一次请求时服务器所应知道的信息先响应给浏览器,由浏览器在之后的请求中再一并发送给应用程序,如此应用程序就可以得知多次请求间的相关资料。

Cookie是在浏览器中保存信息的一种方式,服务器可以响应浏览器set-cookie标头,浏览器收到这个标头与数值后,会将之保存为计算机上的一个文件,这个文件就成为Cookie。可以给Cookie设置一个存活期限,保留一些有用的信息在客户端。如果关闭浏览器之后,再度打开浏览器并连接服务器时Cookie仍在有效期限内,浏览器会使用cookie标头自动将Cookie发送给浏览器,服务器就可以得知先前浏览器请求的相关信息。

Servlet本身体用了创建、设置与读取Cookie的API。如果要创建Cookie,则可以使用Cookie类,创建时指定Cookie中的名称与数值,并使用HttpServletResponse的addCookie()方法在响应中添加Cookie。例如:

Cookie cookie = new Cookie("user", "chu xing");
cookie.setMaxAge(7 * 24 * 60 *60);
response.addCookie(cookie);

HTTP中Cookie的设置时通过set-cookie标头来实现的,所以必须在实际响应浏览器之前只是用addCookie()来添加Cookie实例,在浏览器输出HTML响应之后再执行addCookie()是没有作用的。

可以使用setMaxAge()来设置Cookie的有限期限,设置的单位是秒。默认情况下,关闭浏览器之后Cookie就失效。如果要取得浏览器上保存的Cookie,则可以用从HttpServletRequest的getCookies()来取得,它可以取得该网页所有域(domain)的所有Cookie,所以返回值时Cookie[]数组。取得Cookie对象后,可以使用Cookie的getName()和getValue()方法,分别取得Cookie的名称与数值。例如:

Cookie[] cookies = request.getCookies();
if (cookies != null) {for (int i = 0; i < cookies.length; i++) {String name = cookies[i].getName();String value = cookies[i].getValue();//other process}
}

Cookie的一个常见应用是实现用户自动登录功能,若用户勾选自动登录选项,则下次再访问同一网页就不需要再输入用户名和密码,而可以直接登录该网页。主要示例代码如下:
index.java(检查Cookie):

public class Index extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {Cookie[] cookies = request.getCookies();if (cookies != null) {

这篇关于[ServletJSP] Cookie会话管理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1032603

相关文章

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

Redis实现RBAC权限管理

《Redis实现RBAC权限管理》本文主要介绍了Redis实现RBAC权限管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1. 什么是 RBAC?2. 为什么使用 Redis 实现 RBAC?3. 设计 RBAC 数据结构

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

Python实现文件下载、Cookie以及重定向的方法代码

《Python实现文件下载、Cookie以及重定向的方法代码》本文主要介绍了如何使用Python的requests模块进行网络请求操作,涵盖了从文件下载、Cookie处理到重定向与历史请求等多个方面,... 目录前言一、下载网络文件(一)基本步骤(二)分段下载大文件(三)常见问题二、requests模块处理

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

IDEA中的Kafka管理神器详解

《IDEA中的Kafka管理神器详解》这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验... 目录免安装:IDEA中的Kafka管理神器!简介安装必要的插件创建 Kafka 连接第一步:创建连接第二步:选