会话及其会话技术:Cookie和Session

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/suoyue_py/article/details/98315541

在 Web 开发中,服务器跟踪用户信息的技术称为会话技术
为了保存会话过程中产生的数据,在 Servlet 技术中,提供了 Cookie 和 Session 两个用于保存会话数据的对象

1.Cookie对象

1.1 什么是Cookie
Cookie是一种会话技术,用于将会话过程中的数据保存到用户的浏览器中,从而使浏览器和服务器可以更好地进行数据交互。
服务器向客户端发送 Cookie 时,会在 HTTP 响应头字段中增加 Set-Cookie 响应头字段。 Set-Cookie 头字段中设置的 Cookie 遵循一定的语法格式
Set-Cookie: user=itcast ; Path=/ ;
user 表示 Cookie 的名称
itcast 表示 Cookie 的值
Path 表示 Cookie 的属性
注意: Cookie 必须以键值对的形式存在,其属性可以有多个,但这些属性之间必须用分号和空格分隔。
Cookie在浏览器和服务器之间传输的过程
当用户第一次访问服务器时,服务器会在响应消息中增加 Set-Cookie 头字段,将用户信息以 Cookie 的形式发送给浏览器。
一旦用户浏览器接受了服务器发送的 Cookie 信息,就会将它保存在浏览器的缓冲区中。
这样,当浏览器后续访问该服务器时,都会在请求消息中将用户信息以 Cookie 的形式发送给 Web服务器,从而使服务器端分辨出当前请求是由哪个用户发出的。

1.2 Cookie API
为了封装 Cookie 信息,在 Servlet API 中提供了一个 javax.servlet.http.Cookie 类,该类包含了生成 Cookie 信息和提取 Cookie 信息各个属性的方法。

  • Cookie的构造方法

Cookie类有且仅有一个构造方法,语法格式为:

 public Cookie (java.lang.String name,java.lang.String value)

参数 name 用于指定 Cookie 的名称 , value 用于指定 Cookie 的值
注意: Cookie 一旦创建,名称不能更改,值可以更改

  • Cookie类的常用方法

通过 Cookie 的构造方法创建 Cookie 对象后,便可以调用该类的所以方法

Cookie类的常用方法
在这里插入图片描述

2.Session对象

Cookie 技术可以将用户的信息保存在各自的浏览器中,并且可以在多次请求下实现数据的共享。但若传递的信息较多时,使用 Cookie 技术显然会增大服务器端程序处理的难度。

2.1 什么是Session
Session 是一种将会话数据保存到服务器端的技术。
2.2 HttpSession API
Session 是与每个请求消息紧密相关,为此,HttpServletRequest 定义了用于获取 Session 对象的 getSession() 方法,该方法有两种重载形式:

public HttpSession getSession(boolean create)
public HttpSession getSession()

第一个 getSession() 方法根据传递的参数来判断是否创建新的 HttpSession 对象,若参数为 true,则在相关的 HttpSession 对象不存在是创建并放回新的 HttpSession 对象,否则不创建 HttpSession 对象,而是返回 null。
第二个 getSession() 方法则相当于第一个方法参数为 true 时的情况,在相关的 HttpSession 对象不存在时总是创建新的 HttpSession 对象。
注意:
getSession() 方法可能会产生发送会话标识号的 Cookie 头字段,故必须在发送任何响应内容之前调用 个体Session() 方法。
HttpSession 接口的常用方法
在这里插入图片描述
2.3Session超时管理
在会话过程中,会话的有效时间可以在 web.xml 文件中设置,其默认值由 Servlet 容器定义。在<Tomcat 安装目录>\conf\web.xml 文件中,可以找到一段配置消息:

<session-config>
	<session-timeout>30</session-timeout>
</session-config>

设置的时间值是以分钟为单位,即Tomact 服务器的默认会话超时间隔为 30 分钟。
若时间值设置为 0 或负数,则表示会话永不超时。

猜你喜欢

转载自blog.csdn.net/suoyue_py/article/details/98315541