天天看点

会话机制和登录机制一、会话机制二、登录机制 

本博客为本人学习SSO单点登录时的学习笔记,主要参考了最强SSO单点登录教程(一)多系统的复杂性等系列课程。

一、会话机制

通常是指用户浏览器与服务器进行通信的时间间隔,浏览器和服务器之间的会话是通过浏览器的Cookie和服务器中的Session来进行的。主要过程如下:

1.浏览器第一次访问Tomcat服务器时,服务器会在服务端创建一个Session对象,并存储在服务端维护的map中,其中key为Session对象的id,value为Session对象本身。打开tomcat管理页面,我们可以看到如图所示的服务端所创建的Session对象列表。

会话机制和登录机制一、会话机制二、登录机制 

2. 同时,在服务端响应客户端的时候,会把Session对象的id通过Cookie的方式写入到客户端浏览器,浏览器会把Session的id写入到本地的Cookie中。可以通过谷歌浏览器的开发者工具查看这一过程,如图所示。在响应头(Response Headers)中,可以看到服务器向浏览器返回的Set-Cookie信息中有Sessionde的id,而在请求头中(Request Header),Cookie中并没有携带Session的信息。

会话机制和登录机制一、会话机制二、登录机制 

3.之后,每次浏览器向服务器发送请求,都会读取本地的cookie中的内容,并在请求的时候带上对应的cookie。可以通过谷歌浏览器的开发者工具查看这一过程,如图所示。在响应头(Response Headers)中,可以看到此时服务器向浏览器返回的Set-Cookie信息中没有Sessionde的id(只在第一次请求的时候才会返回),而在请求头中(Request Header),Cookie携带了Session的信息。

会话机制和登录机制一、会话机制二、登录机制 

主要过程如图所示。

会话机制和登录机制一、会话机制二、登录机制 

二、登录机制 

通过上面会话机制的介绍,当我们向服务器发送请求的时候就创建了一个会话(Session对象)。当我们拿到这个Session对象的时候,下一步我们需要考虑这个Session对象如何去使用?

我们知道,通过Session机制,使得服务器能够识别出不同的浏览器以及同一浏览器的多次请求。

我们假设浏览器第一次请求服务器需要输入用户名与密码验证身份,服务器拿到用户名密码去数据库比对,正确的话说明当前持有这个会话的用户是合法用户,应该将这个会话标记为“已授权”或者“已登录”等等之类的状态,既然是会话的状态,自然要保存在会话对象中,Tomcat在会话对象中设置登录状态如下:

HttpSession session = request.getSession();
  session.setAttribute("isLogin", true);
           

用户再次访问时,tomcat在会话对象中查看登录状态:

HttpSession session = request.getSession();
    session.getAttribute("isLogin");
           

实现了登录状态的浏览器请求服务器模型如下图描述:

会话机制和登录机制一、会话机制二、登录机制 

经过上述过程,我们便通过了会话机制实现了单系统的登录机制。