Session会话机制

一.Session由来

    Session的官方定义是:Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。

 说白了Session就是一种可以维持服务器端的数据存储技术。 Session主要有以下的这些特点:

 (1)session保存的位置是在服务器端。

 (2)session一般来说是要配合cookie使用,如果是浏览器禁用了cookie功能,也就只能够使用URL重写来实现session存储的功能。

 (3)单纯的使用session来维持用户状态的话,那么当同时登录的用户数量较多的时候,或者存在较多的数量的session会导致查询慢的问题。

 本质上:session技术就是一种基于后端有别于数据库的临时存储数据的技术。

简答来说:怎么保存同个用户多个请求会话状态呢?自然HTTPS保证连接是安全的,可以使它与一个会话关联。

二.Session机制

1)Why have Session?

主要的一个原因就是HTTP的无状态性。因为HTTP的无状态性,所以我们没有办法在HTTP发送请求的时候知道当前用户的状态,也就是比如说,当前是哪个用户的之类的这种信息,所以这个时候我们需要Session来标识当前的状态。

2)What is Session?

Session代表着服务器和客户端一次会话的过程(生命周期)。直到session失效(服务端关闭),或者客户端关闭时结束。

3)How does session works?

    Session 是存储在服务端的,并针对每个客户端(客户),通过SessionID来区别不同用户的。Session是以Cookie技术或URL重写实现。默认以Cookie技术实现,服务端会给这次会话创造一个JSESSIONID的Cookie值。

    Session的常见实现形式是会话cookie(session cookie),即未设置过期时间的cookie,这个cookie的默认生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。实现机制是当用户发起一个请求的时候,服务器会检查该请求中是否包含sessionid,如果未包含,则系统会创造一个名为JSESSIONID的输出 cookie返回给浏览器(只放入内存,并不存在硬盘中),并将其以HashTable的形式写到服务器的内存里面;当已经包含sessionid是,服务端会检查找到与该session相匹配的信息,如果存在则直接使用该sessionid,若不存在则重新生成新的 session。这里需要注意的是session始终是有服务端创建的,并非浏览器自己生成的。 但是浏览器的cookie被禁止后session就需要用get方法的URL重写的机制或使用POST方法提交隐藏表单的形式来实现。

流程图如下:

三.Session实现

Servlet Session教程

//获取session对象
HttpSession session = request.getSession();
    //绑定一个对象到该 session 会话
	session.setAttribute(Object ob);
response.sendRedirect(request.getContextPath() + "/login/index");

猜你喜欢

转载自blog.csdn.net/wang_snake/article/details/81327242