当前位置:首页 > 服务端 > servlet中cookie和session操作

servlet中cookie和session操作

2022年08月06日 14:29:31服务端8
1.1 软件中的会话

一次会话: 打开浏览器 -> 访问一些服务器内容 -> 关闭浏览器

 

登录场景:

打开浏览器 -> 浏览到登陆页面 -> 输入用户名和密码 -> 访问到用户主页(显示用户名)

修改密码(输入原密码)

 修改收货地址

.......

 

问题:在此处登录会话过程中产生的数据(用户会话数据)如何保存下来呢?

 

购物场景:

 打开浏览器 -> 浏览商品列表  -> 加入购物车(把商品信息保存下来)  -> 关闭浏览器

 打开浏览器->  直接进入购物车 -> 查看到上次加入购物车的商品 -> 下订单 -> 支付

 

问题: 在购物会话过程中,如何保存商品信息??

 

会话管理: 管理浏览器客户端 服务器端之间会话过程中产生的会话数据。

 

域对象: 实现资源之间的数据共享。

 

request域对象

context域对象

 

登录场景:

小张: 输入“张三” (保存数据: context.setAttribute("name","张三")-> 用户主页(显示“张三”)

小李: 输入“李四”(保存数据:context.setAttribute("name","李四")) -> 用户主页(显示“李四”)

 

问题: context是所有用户公有的资源!!!会覆盖数据。

 

小张: 输入“张三”(保存数据: request.setAttribute("name","张三")- > 用户主页(显示“张三”) 问题: 一定要使用转发技术来跳转页面!!!

 

解决办法: 可以使用session域对象来保存会话数据!!!

1.2 会话技术

Cookie技术:会话数据保存在浏览器客户端。

Session技术:会话数据保存在服务器端。

 

 

2 Cooke技术

2.1 特点

Cookie技术:会话数据保存在浏览器客户端。

2.2 Cookie技术核心

Cookie类:用于存储会话数据

 

1)构造Cookie对象

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

2)设置cookie

void setPath(java.lang.String uri)   :设置cookie的有效访问路径

void setMaxAge(int expiry)  设置cookie的有效时间

void setValue(java.lang.String newValue) :设置cookie的值

3)发送cookie到浏览器端保存

void response.addCookie(Cookie cookie)  : 发送cookie

4)服务器接收cookie

Cookie[] request.getCookies()  : 接收cookie

 

2.3 Cookie原理

1)服务器创建cookie对象,把会话数据存储到cookie对象中。

new Cookie("name","value");

2 服务器发送cookie信息到浏览器

response.addCookie(cookie);

 

举例: set-cookie: name=eric  (隐藏发送了一个set-cookie名称的响应头)

3)浏览器得到服务器发送的cookie,然后保存在浏览器端。

4)浏览器在下次访问服务器时,会带着cookie信息

    举例: cookie: name=eric  (隐藏带着一个叫cookie名称的请求头)

5)服务器接收到浏览器带来的cookie信息

request.getCookies();

 

2.4 Cookie的细节

1void setPath(java.lang.String uri)   :设置cookie的有效访问路径。有效路径指的是cookie的有效路径保存在哪里,那么浏览器在有效路径下访问服务器时就会带着cookie信息,否则不带cookie信息。

 

2void setMaxAge(int expiry)  设置cookie的有效时间。

正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。

负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!!

零:表示删除同名的cookie数据

3Cookie数据类型只能保存非中文字符串类型的。可以保存多个cookie,但是浏览器一般只允许存放300Cookie,每个站点最多存放20Cookie,每个Cookie的大小限制为4KB

 

3 Session技术

3.1 引入

Cookie的局限:

1Cookie只能存字符串类型。不能保存对象

2)只能存非中文。

31Cookie的容量不超过4KB

 

如果要保存非字符串,超过4kb内容,只能使用session技术!!!

 

Session特点:

会话数据保存在服务器端。(内存中)

 

3.2 Session技术核心

HttpSession类:用于保存会话数据

 

1)创建或得到session对象

HttpSession getSession()  

HttpSession getSession(boolean create)  

2)设置session对象

void setMaxInactiveInterval(int interval)   设置session的有效时间

void invalidate()      销毁session对象

java.lang.String getId()   得到session编号

3)保存会话数据到session对象

void setAttribute(java.lang.String name, java.lang.Object value)   保存数据

java.lang.Object getAttribute(java.lang.String name)   获取数据

void removeAttribute(java.lang.String name) 清除数据

3.3 Session原理

问题: 服务器能够识别不同的浏览者!!!

现象:

 

   前提: 在哪个session域对象保存数据,就必须从哪个域对象取出!!!!

浏览器1(s1分配一个唯一的标记:s001,s001发送给浏览器)

1)创建session对象,保存会话数据

HttpSession session = request.getSession();   --保存会话数据 s1

浏览器1 的新窗口(带着s001的标记到服务器查询,s001->s1,返回s1

1)得到session对象的会话数据

    HttpSession session = request.getSession();   --可以取出  s1

 

新的浏览器1(没有带s001,不能返回s1)

1)得到session对象的会话数据

    HttpSession session = request.getSession();   --不可以取出  s2

 

浏览器2(没有带s001,不能返回s1)

1)得到session对象的会话数据

    HttpSession session = request.getSession();  --不可以取出  s3

 

 

代码解读:HttpSession session = request.getSession();

 

1)第一次访问创建session对象,给session对象分配一个唯一的ID,叫JSESSIONID

new HttpSession();

2)把JSESSIONID作为Cookie的值发送给浏览器保存

Cookie cookie = new Cookie("JSESSIONID", sessionID);

response.addCookie(cookie);

3)第二次访问的时候,浏览器带着JSESSIONIDcookie访问服务器

4)服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象。

if(找到){

return map.get(sessionID);

}

Map<String,HttpSession>]

 

 

<"s001", s1>

<"s001,"s2>

5)如果找到对应编号的session对象,直接返回该对象

6)如果找不到对应编号的session对象,创建新的session对象,继续走1的流程

 

结论:通过JSESSIONcookie值在服务器找session对象!!!!!

3.4 Sesson细节

1java.lang.String getId()   得到session编号

2)两个getSession方法:

getSession(true) / getSession()  : 创建或得到session对象。没有匹配的session编号,自动创 建新的session对象。

getSession(false):              得到session对象。没有匹配的session编号,返回null

3void setMaxInactiveInterval(int interval)   设置session的有效时间

session对象销毁时间:

3.1 默认情况30分服务器自动回收

3.2 修改session回收时间

3.3 全局修改session有效时间

 

<!-- 修改session全局有效时间:分钟 -->

<session-config>

<session-timeout>1</session-timeout>

</session-config>

 

3.4.手动销毁session对象

void invalidate()      销毁session对象

4)如何避免浏览器的JSESSIONIDcookie随着浏览器关闭而丢失的问题

 

/**

 * 手动发送一个硬盘保存的cookie给浏览器

 */

Cookie c = new Cookie("JSESSIONID",session.getId());

c.setMaxAge(60*60);

response.addCookie(c);

 

总结:

1)会话管理: 浏览器和服务器会话过程中的产生的会话数据的管理。

 

2Cookie技术:

new Cookie("name","value")

response.addCookie(coookie)

request.getCookies()

3Session技术

request.getSession();

 

setAttrbute("name","会话数据");

getAttribute("会话数据")

作者:github_39294367
来源链接:https://blog.csdn.net/github_39294367/article/details/74911370

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/18396.html

标签: CookieSession
分享给朋友:

“servlet中cookie和session操作” 的相关文章

session,ajax 跨域cookie

 什么是Session, 什么是Cookie? Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID为标识符来存取服务器端的Session存储空间。而SessionID这一数据则...

cookie窃取和session劫持

cookie窃取和session劫持

【转】cookie窃取和session劫持 Updates 2014-08-17 感谢@搞前端的crosser的提醒,加入了HTTP Response Splitting的内容。 此篇文章的Presentation戳这里。 一、cook...

session、cookie与“记住我的登录状态”的功能的实现

Cookie的机制 Cookie是浏览器(User Agent)访问一些网站后,这些网站存放在客户端的一组数据,用于使网站等跟踪用户,实现用户自定义功能。 Cookie的Domain和Path属性标识了这个Cookie是哪一个网站发送给浏览器的;Cookie的Expires...

浅谈Cookie和Session的初步理解

浅谈Cookie和Session的初步理解 前言        HTTP是无状态的协议,客户每次读取web页面时,服务器都打开新的连接,而且服务器也不会自动维护客户的上下文...

Cookie和Session的区别与联系

Cookie和Session的区别与联系

Cookie和Session Session 会话的理解 Session的作用 HTTP协议的无状态特点 Sessio...

cookie、session、token之间的关系

cookie、session、token之间的关系

 Cookie机制 由于HTTP是一种无状态协议,服务器没有办法单单从网络连接上面知道访问者的身份,为了解决这个问题,就诞生了Cookie。Cookie实际上是一小段的文本信息。Cookies是由服务器产生的。接下来我们描述一下Cookie产生的过程。浏览器第一次...

Cookie、Session和Token认证

Cookie、Session和Token认证

目录 Cookie Session认证机制 Session的一些安全配置 Token认证机制 Token预防CSRF Session认证和Token认证的区别 前言:HTTP是一种无状态的协议,为了分辨链接是谁发起的,需...

cookie和session的区别,分布式环境怎么保存用户状态

1、session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。 2、session中保存的是对象,cookie中保存的是字符串。 3、session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访...

Servlet之cookie和session简介及其作用

Servlet之cookie和session简介及其作用

一、cookie和session简介 1.浏览器和服务器是多对一的关系 2.业务:登录时记录账号,后续的页面上显示此账号 3.使用如下对象存储账号都不行 request:多个请求之间共用账号,不能用request c...

JavaWeb Cookie客户端技术和Session服务端技术详解

JavaWeb Cookie客户端技术和Session服务端技术详解

目录 1.1  Cookie机制 1.1.1  什么是Cookie 1.1.2  记录用户访问次数 1.1.3  Cookie的不可跨域名性 1.1.4  Unicode编码:保存中文 1.1....

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。