session和cookie

session会话的定义

打开浏览器,进行一系列操作。。。,最后关闭浏览器。这个过程称为:一次会话
会话在服务端会有对应的一个Java对象,名称为:session对象。

在浏览器中,用户点击了以下,然后停了下来,这个过程粗略的认定为:一次请求
请求在服务端也会有对应的一个Java对象,名称为:request对象。

一个会话可以包含多个请求。

在Java的servlet规范当中,session对应的类名:HttpSession(jarkata.servlet.http.HttpSession)

session机制是属于B/S结构的一部分,实际上也是一个规范,不同语言都会有不同实现。

session和cookie为什么会存在?

因为http协议是无状态的协议,session和cookie用来保存用户的会话状态。

无状态是指:在请求时,B和S相连,请求结束之后,连接就会断开,这样设计的原因是为了缓解服务器压力。

服务器无法知道用户是否关闭了浏览器。

session的实现原理

用户第一次请求时,服务器端会生成session对象,以及JSESSIONID,然会把sessionid发送给浏览器端存储;
用户第二次请求时,浏览器cookie会携带JSESSIONID,请求服务器,服务器端根据sessionid找到对应的session对象。

JSESSIONID是以Cookie的形式保存在浏览器的内存中的,
当浏览器关闭,内存消失,cookie就消失了,JSESSIONID就消失了,一次会话结束。

涉及到的域对象

○ request(对应的类名:HttpServletRequest)
■ 请求域(请求级别的)

○ session(对应的类名:HttpSession)
■ 会话域(用户级别的)

○ application(对应的类名:ServletContext)
■ 应用域(项目级别的,所有用户共享的。)

○ 这三个域对象的大小关系
■ request < session < application

○ 他们三个域对象都有以下三个公共的方法:
■ setAttribute(向域当中绑定数据)
■ getAttribute(从域当中获取数据)
■ removeAttribute(删除域当中的数据)

○ 使用原则:尽量使用小的域。

cookie的实现原理

在session的实现原理中,每一个session对象都会关联一个sessionid。
JSESSIONID=xxxx这个键值对数据其实就是cookie对象。

用户第二次发送请求时,会通过
Cookie:JSESSIONID=xxxx 的形式把cookie发送给服务器,服务器就是根据xxxx来查找对应的session会话对象。

在Java的servlet中,对cookie提供了哪些支持?

Java提供了一个Cookie类来表示cookie数据。jakarta.servlet.http.Cookie
Java程序通过response.addCookie(cookie)把cookie数据发送给浏览器。

HTTP协议中规定:当浏览器发送请求的时候,会自动携带该path下的cookie数据给服务器。(URL)

# 创建cookie对象
Cookie cookie = new Cookie();

# 设置cookie的过期时间,单位:秒
# 如果没有设置有效时间:默认保存在浏览器的运行内存中,浏览器关闭则cookie消失。
# 只要设置cookie的有效时间大于0,这个cookie一定会存储到硬盘文件当中。
# cookie的有效时间等于0,则相当于删除同名的cookie。
# cookie的有效时间小于0,则相当于没设置过期时间。
cookie.setMaxAge(60 * 60)

# 设置关联路径,只要时请求/user下的路径,就会携带该cookie对象。
cookie.setPath(/user”)

浏览器发送cookie给服务器了,服务器中的java程序怎么接收

// 这个方法可能返回null
Cookie[] cookies = request.getCookies(); 
if(cookies != null){
    for(Cookie cookie : cookies){
        // 获取cookie的name
        String name = cookie.getName();
        // 获取cookie的value
        String value = cookie.getValue();
    }
}

服务器端获取session:

# 获取session对象,如果没有则创建一个session对象。
HttpSession session = request.getSession();

# 获取session对象,如果没有则返回null
HttpSession session = request.getSession(false);
  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值