龙空技术网

http是短连接,如何保持会话呢?

linux运维菜 423

前言:

目前各位老铁们对“session 保持”可能比较关心,咱们都需要剖析一些“session 保持”的相关内容。那么小编也在网摘上收集了一些有关“session 保持””的相关资讯,希望同学们能喜欢,姐妹们快快来学习一下吧!

前言

会话一般是指TCP三次握手就创建了一个会话,然后在会话中 ,传输数据,等TCP关闭连接就关闭会话了。HTTP协议是基于TCP协议的,所以http会话也是在TCP关闭连接后就关闭会话,而在http1.1中,一般一个连接就只能处理一个请求,那如果需要用到权限验证等就无法准确的判断,这使用就需要用到会话了。

会话保持

目前后端的语言框架基本都有处理会话的模块,一般有以下几种方式:

1、存放到文件

将session的信息存放到文件中,在客户端第二次请求的时候,系统就会在文件查找相关的session信息进行验证或者返回指定的数据。

2、存放到内存

session信息存放到文件就会涉及到磁盘IO读写的瓶颈,因此存放到内存可以有效的提升效率。

上面两种方法在单机的时候都可以很顺利的进行,如果是多台服务器进行处理,需要共享session就比较难处理了。如果是存放到文件可以使用文件共享服务(例如:NFS)进行文件共享,但是NFS对高并发的读写性能真的不行啊;存放到内存,有些服务(例如:tomcat)可以直接共享session给同一个集群的其他机器,但是高并发的情况下,会对后端的服务性能有影响。

3、cookies加密存放

可以将信息存放到客户端的cookies中,客户端请求的时候带上cookies信息,这样子请求无论到哪台服务器,都可以有指定的会话标识,但是这样子感觉不安全,客户端不好控制啊。

4、存放到数据库

同一个后端的服务一般都是连接同一个数据库,可以将session信息存放到数据库里面,这样子同个集群的服务器都可以获取到session信息了。但是这样子会给数据库增加很大的负担,因为session信息的查询还是比较频繁的。

5、存放到缓存服务

memcachd、redis等缓存服务,效率都是很高的,可以将session存放到这些服务中,查询效率高,又可以实现共享session的目的。

Python Django支持以上这几种的会话保持方式。

总结

以上观点都是个人看法,如有误,欢迎留言讨论。

标签: #session 保持