美文网首页
会话管理

会话管理

作者: 发愤图强的敏敏子 | 来源:发表于2020-05-29 11:06 被阅读0次

    1、什么是会话管理?

          我们都知道HTTP协议是无状态协议。啥意思呢?就是请求完成连接就断开了,下次再请求的时候服务器就又不知道是谁发的了。对于我们的网页应用来说这显然是很致命的,那怎么解决这种问题呢,这就需要我们有一个种可以保留连接状态的东西,这就是我们说的会话管理。使用会话管理可以让服务端精准的判断这个请求是哪个用户发送的,以进行往后的一系列操作,这样问题不就解决啦。

    2、会话管理分类

            (1)、桌面会话管理;

            桌面会话管理器是一个程序,会记录桌面会话是所有正在运行的窗口和当前的内容,可以保存和恢复桌面会话

            基于Linux系统是由X会话管理器。而基于Microsoft Windows系统没有会话管理器包含在系统中,会话管理是由第三方提供(类似twinsplay第三方应用程序)。

            (2)、浏览器会话管理;

            浏览器会话管理是非常有用的,可以在一定的时间内保存和打开网页的设定;主要用于在系统和应用软件崩溃时,可以恢复系统或应用软件正在运行的页面和设置。会话管理往往是管理完善的饼干应用。

            (3)、Web服务器的会话管理(通常指的SESSION以及COOKIE)。

              web服务器的会话管理是由Web开发人员用来进行HTTP协议无状态会话状态支持的技术。例如,通过登录在服务器端验证真实性的用户,下一个HTTP请求(GET或POST)服务器不应当再次要求客户端提供账号、密码。

    这次会议的信息使用会话标识符(会话ID)在服务器上存储。“存储”的会话ID和相关的会话数据(用户名,账号等,在Web服务器上)使用了多种技术,包括但不限于:本地内存,平面文件和数据库。

    在多种情况下Web服务器必须共享会话状态(这是典型的群集环境),会话资料必须在群集节点之间运行和共享。

    3、那什么是cookie和session呢?

    1、cookie

    客户端发起登录请求,服务端验证登录信息,如果登录成功就创建一个登录凭证(比如userid)写到cookie当中,cookie保存在浏览器中,并且设置一个有效期。一般登录凭证都会做加密处理,以防被人截取。

    客户端登录成功之后,再发起请求的时候就会携带上这个凭证。服务端拿到凭证之后会进行验证,成功之后用凭证的过期时间和当前时间做比较,如过已经过期则需要重新登录。如果没有过期就继续后续操作。

    cookie的产生、加密和验证过程

    cookie的利弊:

            (1)、cookie是有大小限制的,不能存放太多数据

            (2)、每次请求都传送cookie,增加了请求的数量,对性能会有些影响

            (3)、因为cookie是按照域名存的,所以存在跨域问题

    2、session

    Session与Cookie在本质上没有区别,都是针对HTTP协议的局限性而提出的一种保持客户端和服务器间保持会话连接状态的机制。但是它是将会话状态存在服务器端。

    用户在第一次访问的时候,服务器端就会创建一个session对象代表一个会话过程,用来存放数据。并且为每一个session分配一个唯一的sessionId,然后这里还是要用到cookie,通过cookie把sessionId传递到客户端浏览器,再次访问时就会携带这个sessionId,服务端就可以通过它去查找对应的session对象。

    session一般会设定一个失效的时间,如果用户在这段时间内登录了,那么服务端就会把有效期再延长。如果有效期内没有登录,那么就销毁过期的session,再创建新的session返回给客户端。

    session的利弊:

    它的优点是比较安全,因为信息全部存在服务器端,与客户端之间只传递一个sessionId串。

    当然,信息存在服务器端也有很多缺点:

            (1)、访问量大时,会占用较多的服务器内存

            (2)因为session是有某个服务器创建的,当应用采用集群部署的时候,多台服务器之间怎么共享session。

    既然涉及到多态服务器,就要也要考虑到cookie跨域问题。面对这些问题,我们也有一些对应解决办法:比如共享session这个问题,我们可以使用redis这种中间服务器来管理对session的操作,既减轻了服务器的压力又实现了session共享。然后就只需要解决cookie跨域问题了。

    3、token

    以上两种方式,在web应用中没有什么问题,但是如果是在native app上,因为要用到cookie,所以并不好管理。这时token是个不错的选择。

    它和cookie的方式区别不大,但是token不写在cookie里。当用户登录成功之后服务端会将token传递给客户端,客户端将token存在本地之后,以后每次请求的时候主动添加到http header或者url后面。听到每次主动添加感觉貌似有点麻烦,但是大家都知道,只要把方法封装一下并没有什么。

    和cookie一样会有token刷新的问题,同样,如果在有效期内登录就把失效时间延长。然后再返给客户端。客户端检测到有新的token之后就把旧的替换掉。

    相关文章

      网友评论

          本文标题:会话管理

          本文链接:https://www.haomeiwen.com/subject/slgmmctx.html