自动化测开基础(java会话管理Session)五

会话管理

•Web应用程序基于HTTP协议
•HTTP基于请求/响应模式
–所有请求都是相互独立的,无连续性的
•HTTP是无连接的协议
–限制每次连接只处理一个请求
•HTTP是无状态的协议
–协议对于事务处理没有记忆能力

•对于简单的页面浏览或信息获取,HTTP协议即可胜任
–浏览资讯,查看在线图书目录
•对于需要客户端和服务器端多次交互的网络应用,则必须记住客户端状态
–网上的购物车,用户登录

•会话就是一个客户端连续不断地和服务器端进行请求/响应的一系列交互
•多次请求间建立关联的方式称为会话管理,或会话跟踪
–会话状态,指服务器与浏览器在会话过程中产生的状态信息

HTTP没有提供任何记住客户端的途径,服务器如何建立、维护与客户端的会话?
1.  Request   2. 生成标识符
3.  Response+标识符
4.  Request+标识符   5. 根据标识符识别客户端

–当服务器接收到客户端的首次请求时,服务器初始化一个会话并分配给该会话一个唯一标识符
–在以后的请求中,客户端必须将唯一标识符包含在请求中,服务器根据此标识符将请求与对应的会话联系起来

如何实现会话管理

1、Cookie(与session搭配,识别客户端。使用第三方缓存,不安全)

•所有的HTTP消息,不管是请求还是响应均包含头信息
–当服务器返回响应给客户端时,Servlet容器把会话的信息添加到响应头信息中
–客户端浏览器接收到响应后提取头信息,并将其存储在本地机中,以后发送请求时会自动将该信息带回服务器端
•浏览器存储在客户端机器上的头信息称作Cookie,它以“属性名=属性值; …”方式组成文本信息

 创建并向客户端发送Cookie


•创建Cookie对象
–调用Cookie的构造方法,给出Cookie的名称和Cookie的值,二者都是字符串
•Cookie c = new Cookie(“userName”,”a1234”)
•设置最大时效
–如果要告诉浏览器将Cookie存储到磁盘上,而非仅保存在内存中,使用setMaxAge方法(参数为数)
–c.setMaxAge(60*60*24*7)//一周(正数)

•将Cookie放入到HTTP响应中
–使用response.addCookie(c)
–如没有这一步,将不会有任何Cookie被发送到浏览器

从客户端读取Cookie


•调用request.getCookies
–得到Cookie对象组成的数组
–循环数组,调用每个对象的getName找到想要的cookie
–根据应用程序调用getValue方法使用这个Cookie

Cookie[] cookies = request.getCookies();
if(cookies != null){
for(Cookie cookie : cookies){
             if("userId".equals(cookie.getName())){
//doSomethingWith(cookie.getValue());
       }
}
}

Cookie常用方法

•getMaxAge()/setMaxAge()
–读取/设置Cookie到期时间(秒)
•如果值为0,表示删除对应的Cookie
•如果值为负数,表示Cookie只适用于当前的浏览会话
•默认值为-1
•getName()
–读取Cookie的名称。不存在setName()方法

•getValue()/setValue()
–读取/设置与Cookie关联的值
•如果重新设置了某Cookie的值,需要用addCookie()方法将其发送回去

•优点
–可配置到期规则,数据可持久保存
–不需要服务器资源,数据保存在客户端
–简单性,基于文本的Key-Value对
•缺点
–大小受到限制(总数300;20/站点;4KB/Cookie)
–用户可禁用客户端接收Cookie的功能
–潜在的安全风险

使用隐藏的表单域


•思想
–通过使用隐藏域,由浏览器主动告知服务器多次请求间必要的信息,如在线问卷作答

•优点
–Cookie被禁用或者根本不支持的情况下依旧能够工作
•缺点
–关掉网页后会遗失先前的请求信息
–所有的页面必须是表单提交之后的结果

  • cookie 有存储大小限制,4KB 左右。
  • 浏览器每次请求会携带 cookie 在请求头中。
  • 字符编码为 Unicode,不支持直接存储中文。
  • 数据可以被轻易查看。

使用URL重写

•思想
–当服务器响应浏览器上一次请求时,将某些相关信息以超链接方式响应给浏览器,超链接中包括请参数信息

 –由于GET方式发送请求,通常URL重写用于简单客户端信息保留,或辅助Session会话管理

Session(客户端与服务器之间的会话)

session 由服务端创建,当一个请求发送到服务端时,服z务器会检索该请求里面有没有包含 sessionId 标识,如果包含了 sessionId,则代表服务端已经和客户端创建过 session,然后就通过这个 sessionId 去查找真正的 session,如果没找到,则为客户端创建一个新的 session,并生成一个新的 sessionId 与 session 对应,然后在响应的时候将 sessionId 给客户端,通常是存储在 cookie 中。如果在请求中找到了真正的 session,验证通过,正常处理该请求

原文链接:https://blog.csdn.net/m0_65489440/article/details/125676761

•在Servlet中进行会话管理,可以使用HttpServletRequest的getSession()方法取得HttpSession对象(简称为Session),通过设置/获取服务器端Session对象的属性,来保留请求之间的相关信息

Servlet容器提供Session接口来代表服务器端和客户端的会话
–当一个WEB服务器为客户端开始一个会话时,创建一个新的Session对象(含有特殊ID,称为Session ID,默认用Cookie存放在浏览器中。在Tomcat中,Cookie的名称为JSESSIONID)

–Session将数据存储在服务器的内存中,供以后来自同一个客户端的请求使用

 使用Session实现用户登录

–登录时,创建Session对象并设置相关属性

HttpSession session = req.getSession();
session.setAttribute("userName", userName);

–再次访问时,获取Session对象和相关属性

HttpSession session = req.getSession();
String user = (String)session.getAttribute("userName");

Session和Cookie

sessionId 是 cookie 和 session 之间的桥梁。我们日常的系统中如果在鉴权方面如果使用的是 cookie 方式,那么大部分的原理就和我们前面说的一样。

或者我们可以换个说法,session 是基于 cookie 实现的,它们两个主要有以下特点:

session 比 cookie 更加安全,因为它是存在服务端的,cookie 是存在客户端的。
cookie 只支持存储字符串数据,session 可以存储任意数据。
cookie 的有效期可以设置较长时间,session 有效期都比较短。
session 存储空间很大,cookie 有限制。

会话失效

•Session对象失效:当用户超出指定会话期时间处于非活动状态时,会话自动结束
–setMaxInactiveInterval(),设置会话的超时期
–通过web.xml的<session-timeout>标签设置
–使用方法invalidate()
•Cookie失效
–默认关闭浏览器Cookie消失
–在web.xml中设定存储Session ID的Cookie存活期限

Session与URL重写

•当用户浏览器禁用Cookie时,仍打算运用Session来进行会话管理,可以对所有的URL使用URL重写
–可以使用HttpServletResponse的encodeURL()方法在URL后附加Session ID

Session的方法

•getAttribute()
–从会话对象中提取出一个之前存储的属性值

String a = (String)session.getAttribute(“x”);
即为:将session中x所存的值赋值给字符串a


•如果没有找到与名称相关联的值,则返回null
•setAttribute()   设置会话对象的属性名称和属性值

如:session.setAttribute(“x”,y)
即为:将y的值存入x中
•removeAttribute()   移除与名称关联的值

String a = session.remove(“x”); a不存在 报错;


•getAttributeNames()  返回会话中所有属性的名称
•getId()   返回唯一的标识符

•isNew()
–确定会话对于客户来说是否为新创建
•getCreationTime()
–返回会话创建的时间
•getLastAccessedTime()
–返回客户端最近一次发送请求的时间
•getMaxInactiveInterval()、
setMaxInactiveInterval()
–取得或设置会话的超时期
•invalidate()    废弃当前的会话

•实验一
–分别使用Cookie和Session技术实现用户自动登录功能
•实验二
–使用Session实现购物车功能

  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Web开发中,Session是一种保存在服务器端的用户会话状态管理机制。它可以帮助Web应用程序在多个请求之间存储和共享数据,以实现用户的持久化状态管理。 在Java中,可以使用HttpServletRequest对象的getSession()方法来获取Session对象,并使用Session对象的方法来实现Session的创建、设置、获取和销毁等操作。具体使用方法如下: 1. 创建Session对象:可以使用HttpServletRequest对象的getSession()方法来创建Session对象。如果当前会话中已经存在Session对象,则返回该对象;否则创建一个新的Session对象并返回。 ```java HttpSession session = request.getSession(); ``` 2. 设置Session属性:可以使用Session对象的setAttribute()方法来设置Session的属性,例如用户名、购物车等。 ```java session.setAttribute("username", "user1"); ``` 3. 获取Session属性:可以使用Session对象的getAttribute()方法来获取Session的属性,例如获取用户名、购物车等。 ```java String username = (String)session.getAttribute("username"); ``` 4. 销毁Session:可以使用Session对象的invalidate()方法来销毁Session,从而清除该Session中所有的属性和值。 ```java session.invalidate(); ``` 需要注意的是,Session的生命周期与用户的会话时间相关,如果用户在一定时间内没有活动,则Session会自动失效。可以使用Session对象的setMaxInactiveInterval()方法来设置Session的最大空闲时间,以控制Session的生命周期。 另外,Session也有一些安全性问题,例如Session的数据可能会被窃取或伪造。因此,在使用Session时需要注意安全性,例如设置Session的ID等参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值