Cookie和Session的作用:
都是用于存储一些关键数据。
Cookie和Session的存储位置:
Cookie储存在客户端,Session储存在服务器
Cookie的产生和销毁以及原理:
Cookie由服务器产生,通过HTTP协议发送给客户端。
在协议的响应头中的:Set-Cookie标注了这个cookie的信息:
下次如果有cookie带给服务器时,将会在
在协议的请求头中的:Cookie标注了这个cookie的信息:
/* * 正值表示 cookie 将在经过该值表示的秒数后过期。注意,该值是 cookie 过期的最大 生存时间, 不是 * cookie的当前生存时间。 负值意味着 cookie 不会被持久存储,将在 Web 浏览器退出时删除。0 值会导致删除cookie */ cookie.setMaxAge(Integer.MAX_VALUE);
Cookie的属性和特点:
// 创建cookie的时候,就将一个字符串类型的k-v值传入,一个cookie只能由一个k-v Cookie cookie = new Cookie("keyyy", "valueeee"); /* * 指定一个描述 cookie 用途的注释。如果浏览器向用户显示 cookie,则注释很有用。 Netscape Version 0 * cookie 不支持注释。 */ cookie.setComment("testCook"); /* * RFC 2109 指定了域名的形式。域名以点 (.foo.com) 开头,意味着在指定域名系统(Domain Name * System,DNS)区域中(例如,www.foo.com,但不是 a.b.foo.com)cookie * 对于服务器是可见的。默认情况下,cookie 只返回给发送它们的服务器。 * pattern 包含域名(在其中此 cookie 可见)的String;域名形式符合 RFC 2109 */ //cookie.setDomain(""); /* * 正值表示 cookie 将在经过该值表示的秒数后过期。注意,该值是 cookie 过期的最大 生存时间, 不是 * cookie的当前生存时间。 负值意味着 cookie 不会被持久存储,将在 Web 浏览器退出时删除。0 值会导致删除 cookie。 */ cookie.setMaxAge(Integer.MAX_VALUE); /* * 指定客户端应该返回 cookie 的路径。 cookie 对于指定目录中的所有页面及该目录子目录中的所有页面都是可见的。cookie * 的路径必须包括设置 cookie 的 servlet,例如 /catalog,它使 cookie 对于服务器上 /catalog * 下的所有目录都是可见的。默认状态是当前发送cookie的这一个servlet的同级目录 */ //cookie.setPath(""); /* * 指示浏览器是否只能使用安全协议(如 HTTPS 或 SSL)发送 cookie。 默认值为 false。 flag 如果为 * true,则仅在使用安全协议时将 cookie 从浏览器发送到服务器;如果为 false,则在使用任何协议时都可以发送 */ cookie.setSecure(false); /* * 在创建 cookie 之后将新值分配给 cookie。如果使用二进制值,则可能需要使用 BASE64 编码。 对于 Version 0 * cookie,值不应包含空格、方括号、圆括号、等号、逗号、双引号、斜杠、问号、at 符号、冒号和分号。 * 空值在所有浏览器上的行为不一定相同。 */ cookie.setValue("vvv"); /* * 设置此 cookie 遵守的 cookie 协议版本。版本 0 遵守原始 Netscape cookie 规范。版本 1 遵守 RFC * 2109。 */ cookie.setVersion(1); //发送这个cookie response.addCookie(cookie);
Session的产生和销毁以及原理:
首先Session作用与一次会话。什么是会话?就是从打开这个网站,进行一些操作直到到关闭这个网站。
Session由服务器产生,产生后将通过Cookie(没有的话就创建一个)给客户端发送一个带有JSESSIONID参数和值的一个键值。
JSESSIONID就是当前这个会话代表的Session在服务器内存中的一个区域的标识,在一个会话中每次发出请求时都带有这个Cookie,通过Cookie中的这个JSESSIONID标识就能定位到服务器中这个Session。
Session的话关闭关闭即删除,或者使用session.invalidate();移除这个session。
Session实例:
Session的属性和特点:
Session的创建:
/* * 获取到当前的session * getSession()与getSession(true)用法相同!: 如果当前有session,则返回当前的session,如果没有,就创建一个 * getSession(false): 当前没有session,也不创建新的session */ HttpSession session = req.getSession();
Session是一个域,可以存放对象,作用范围是一次会话。
关于对象的存取不说了,这里说说关于对象的移除。
很多人会用session.invalidate()来删除session,这样session域中的对象也就没了,但是这样不好。
第一个是会伤及无辜,为了删除对象a,结果b,c,d也全都没了。第二个是会浪费资源,因为每次直接删除
session,那么在本次回话的下次请求时又得建立新的session。
也有使用removeAttribute(key);这样的方式来移除对象的,这样比较好。
时间: 2024-10-11 22:21:57