会话以及会话技术

时间:2020-12-04 01:03:12

一.什么是会话技术?

当用户通过浏览器访问web应用时,通常状态下,服务器需要对用户状态进行跟踪,会话技术就是浏览器跟踪用户信息的技术。

它是指一个客户端(浏览器)与web服务器之间连续发生的一系列请求和响应的过程,比如用户在网站商品结算时,web服务服务器必须根据请求用户的身份找到该用户所购买的商品。在客户端和服务器交互的过程中也会产生一些数据。为了保存会话中产生的数据。Serverlet提供了两个用于保存会话数据的对象。分别是Cookie和Session。

会话: 一次会话中包含多次请求和响应。

一次会话:浏览器第一次给服务器发送请求时,会话建立,直到有一方断开为止。

会话和会话技术的功能:在一次会话的范围内的多次请求间来共享数据。

二.会话技术的方式:

1.客户端会话技术:Cookie

2.服务器端的会话技术:Session


三.Cookie对象

客户端会话技术。Cookie可以将会话过程中的数据保存到用户的浏览器中,从而使浏览器和服务器更好的交互。

Cookie快速入门:

1.创建Cookie对象,绑定数据。

new Coookie(String name,String value)

2.发送Cookie对象。

respose.addCookie(Cookie cookie)

3.获取Cookie,拿到数据。

Cookie[ ] request.getCookies()

实现原理:基于响应头set-cookie和请求头cookie实现。

四.Cookie的一些注意细节:

1.一次可不可以发送多个Cookie?

可以,可以创建多个Cookie对象,使用response调用多次addCookie方法去发送cookie即可。

2.Cookie在浏览器中保存多长时间?

*默认情况下,当浏览器关闭后,Cookie数据被销毁。

*持久化存储:使用函数  setMaxAge(int seconds)

正数--->将Cookie数据写到硬盘的文件中。持久化存储。并指定CooKie存活时间,时间到了之后,Cookie的文件自动失效。

负数--->默认值。

零--->删除掉cookie的信息。

3.Cookie能不能存储中文?

在Tomcat 8之前 cookie中是不能直接存储中文数据的。如果需要存储,需要将中文数据转码----一般采用URL编码(%E3)

在Tomcat 8之后,cookie支持中文数据。

4.Cookie共享问题?

1.假设在一个Tomcat服务器中,部署了多个web项目,那么在这些项目中cookie能不能共享?

  • 默认情况下cookie不能够共享
  • setPath(String Path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录,如果需要共享,则可以将path设置为“/”

2.不同的Tomcat服务器间cookie的共享问题

  • setDomain(String Path):如果设计一级域名相同,那么多个服务器之间cookie可以共享。
  • 比如setDomain(".baidu.com") 那么tieba.baidu.com和news.baidu.com中的cookie就可以共享啦。

五.Cookie的特点和作用

特点:

cookie存储数据在客户端浏览器。

浏览器对单个cookie大小有限制(4kb),而且对同一个域名下的cookie总数量也有限制(20个)。

作用:

cookie一般用于存储少量的不太敏感的数据。

在不登录的情况下完成服务器对客户端的身份的识别。


六.Session对象

服务器端的会话技术。Session可以在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession

Session快速入门:

1.获取HttpSession对象:

HttpSession session =request.getsession( );

2.使用HttpSession对象:

object getAttribute(String name)

void setAttribute(String name, object value)

void removeAttribute(String name)

服务器如何确保,在一次会话中,多次获取的session对象是同一个???

原因:Session是依赖于Cookie的!服务器是通过Cookie来确保在一次会话中多次请求获取的session对象是同一个。

会话以及会话技术

原理:Session是依赖于Cookie的!

七.Session的一些小细节:

1.当客户端关闭之后,服务器不关闭,两次获取的session是否为同一个?

默认情况下,不是。

如果需要相同,则可以创建cookie,键为JSESSIONID,设置最大存活时间,让Cookie持久化保存。

会话以及会话技术

2.客户端不关闭,服务器关闭后,两次获取的session是否为同一个?

不是同一个。但是要确保数据不丢失。就要用到session的钝化和session的活化。

session的钝化:在服务器正常关闭之前,将session对象序列化到硬盘上

session的活化:在服务器启动之后,将session文件转化为内存中的session对象即可。

3.Session的失效时间(什么时候被销毁)?

  • 服务器关闭
  • session对象调用invalidate()
  • session默认失效时间 30分钟。可以在xml自行配置

会话以及会话技术

4.Session的特点

  • session可以用来存储一次会话的多次请求的数据,存在服务器端。
  • session可以存储任意类型,任意大小的数据。


八.Session和Cookie的区别:

  • Session存储数据在服务端,Cookie存储数据在客户端。
  • Session没有数据大小的限制,Cookie有数据大小的限制。
  • Session数据安全,Cookie相对于来说不安全。