CN103685304A - 一种共享session信息的方法和*** - Google Patents
一种共享session信息的方法和*** Download PDFInfo
- Publication number
- CN103685304A CN103685304A CN201310725271.9A CN201310725271A CN103685304A CN 103685304 A CN103685304 A CN 103685304A CN 201310725271 A CN201310725271 A CN 201310725271A CN 103685304 A CN103685304 A CN 103685304A
- Authority
- CN
- China
- Prior art keywords
- session
- session information
- server
- http request
- application server
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种共享session信息的方法和***,其方法包括:A、客户端发起http请求,通过服务端的http服务器中转给服务端的过滤器;B、所述过滤器拦截所述http请求,根据会话ID更改session信息的存取空间,将存取空间从应用服务器内存更改为memcache服务器;C、过滤器对所述http请求进行过滤处理后输出给服务端的应用服务器处理业务逻辑并对客户端响应。本发明将session信息保存在memcache服务器中并通过会话ID与客户端绑定,使每个客户端只有一份session信息且所有应用服务器共享该session信息,解决了服务器间session信息不能共享的问题。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种共享session信息的方法和***。
背景技术
目前,大多数互联网web应用都使用了session信息(在网络应用中,称为“会话”,具体到Web中指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间;也可理解为会话周期,一种在服务器保持用户状态的机制,允许将对象存储在服务器的内存中,并一直保存到会话周期结束)来保存用户会话共享信息。客户端的Session信息是存储在cookie(为了辨别用户身份、进行session信息跟踪而储存在用户本地终端上的数据)中,当一个session信息第一次被启用时,一个唯一的ID被存储于本地的cookie中。因此,A用户和C服务器建立连接时所处的Session信息同B用户和C服务器建立连接时所处的Session信息是两个不同的Session信息。
随着用户量的增长,服务器不可避免的需要服务器集群(将很多服务器集中起来一起进行同一种服务,在客户端看来就象是只有一个服务器)部署,否则无法支撑庞大的访问量。由于session信息是分别保存在每一台web应用服务器上,当同一个用户的http请求被分配的其他web应用服务器上处理时,session信息就会丢失,从而导致应用程序错误。这就引出了服务器集群部署时session信息共享的问题。
目前解决session信息共享问题主要有以下几种方案:
1,通过cookie将全部session信息保存在客户端,每次http请求时再传给服务器。如图1所示,客户端10(http请求发起者)发起http请求,把保存在cookie中的session信息作为httphttp请求的参数通过http服务器30(http请求中转者)中转给应用服务器(应用服务器为http请求处理者,有多个,图1中仅示例应用服务器20和应用服务器21)。应用服务器解析cookie,读取session信息中的信息。响应的时候应用服务器再把当前的session信息写入cookie中传回给客户端10保存。每次http请求均重复上述流程。这种在网络中使用cookie保存session信息,通过传输cookie来实现session信息来回传递的方式,即可解决集群环境session信息丢失问题。
该方式的缺点是依赖客户端10开启cookie,由于cookie的大小有限制,无法保存比较大的数据,也会增加一定的带宽消耗。
2,利用Web服务器来实现session sticky(即会话粘连,指在一个会话周期内,把用户的所以http请求都定向到同一台web应用服务器处理)。如图2所示,所述Web服务器40采用apache(世界使用排名第一的Web服务器软件)或nginx(一个高性能的 HTTP 和 反向代理 服务器)。假设客户端10发起第一http请求,Web服务器40根据定义的策略将第一http请求分配到某一台固定的应用服务器(即应用服务器20)中处理。客户端11发起第二http请求,Web服务器40根据定义的策略将第二http请求分配到另一台固定的应用服务器(即应用服务器21)中处理。在不改变策略的前提下,那客户端10、11在一个会话周期内的全部http请求都将分别被与其对应固定的应用服务器20、21处理。这种方式限定了一台客户端在一个会话周期内的http请求只会被一台服务器处理,从而不需要共享session信息。
该方式的缺点是:如果web服务器死机,session信息就会丢失,存在单点故障风险。
3,Session Replication(即会话复制,指在服务器之间复制session信息,使得每台服务器的session信息一致)定时同步复制应用服务器间的session信息。如图3所示,假设http服务器30将session信息1、session信息2、session信息3分别中转给应用服务器20、应用服务器21、应用服务器22中存储。定期的执行复制操作,把各个应用服务器内的session信息进行同步,使得所有应用服务器中均存储有session信息1、session信息2、session信息3。这样在服务器集群环境下,来自客户端的http请求无论被分发到哪一台应用服务器处理,都可以获取到相应的session信息。即使正访问的应用服务器死机了, 用户的http请求也能自动被转到别的应用服务器以获取相关session信息。
该方式的缺点是效率低,存储的数据量较大,有延迟,用户体验较差。
4,利用tomcat(一种轻量级的web应用服务器)插件,将session信息保存到memcache服务器(一个高性能的分布式的内存对象缓存***)中,从而实现session信息共享。该方式的缺点是只能支持tomcat,升级风险较大。
因而现有技术还有待改进和提高。
发明内容
鉴于上述现有技术的不足之处,本发明的目的在于提供一种共享session信息的方法和***,以解决现有技术session信息共享易丢失、效率低、依赖特定服务器的问题。
为了达到上述目的,本发明采取了以下技术方案:
一种共享session信息的方法,其包括:
A、客户端发起http请求,通过服务端的http服务器将所述http请求中转给服务端的过滤器;
B、所述过滤器拦截所述http请求的请求信息和响应信息,根据会话ID更改包含用户信息的session信息的存取空间,将存取空间从应用服务器内存更改为用于存储session信息的memcache服务器;
C、过滤器对所述http请求进行过滤处理后输出给服务端的应用服务器,所述应用服务器根据http请求处理业务逻辑并对客户端响应。
所述的共享session信息的方法,其中,所述步骤B具体包括:
B1、所述过滤器拦截所述http请求;
B2、判断是否已产生会话ID,若已产生会话ID,则执行B3;若没有产生会话ID则生成一会话ID;
B3、以所述会话ID标记session信息的存储地址,使session信息的存储空间从服务器内存更改为memcache服务器。
所述的共享session信息的方法,其中,所述步骤B2具体包括:
B21、过滤器读取所述http请求中对应的cookie,从cookie中获取该会话ID;
B22、判断所述会话ID的值是否为0:若是,则生成全局唯一的会话ID,将该会话ID的值作为session信息存储到memcache服务器的key值,并将该会话ID的值写入cookie,并保存至客户端;否则,执行步骤B3。
所述的共享session信息的方法,其中,所述步骤B3具体包括:
B31 继承原生request对象和session对象,设置继承得到的子类对象分别为newRequest子类对象和newSession子类对象;
B32 在所述newSession子类对象中,重写父类中存取session信息的方法,使得在newSession子类对象中存取session信息的空间从应用服务器内存转移到memcache服务器;在memcache服务器所占用的空间由所述会话ID标记;
B33 在所述newRequest子类对象中,重写父类中的获取session对象实例的方法;在newRequest子类对象的该方法中,返回newSession子类对象的实例。
所述的共享session信息的方法,其中,所述的newRequest子类对象中包括第一成员变量jsid,第一成员变量jsid的值与所述的会话ID的值相等。
所述的共享session信息的方法,其还包括:实现用于在所述的newSession子类对象中直接操作memcache服务器的工具类;所述工具类包括提供获取、替换、删除、保存缓存操作。
所述的共享session信息的方法,其中,所述newSession子类对象中包括第一成员变量jsid和第二成员变量map;其中,第一成员变量jsid为存储session信息到memcache中的key值,第二成员变量map为保存session信息的数据结构。
所述的共享session信息的方法,其中,所述步骤C具体包括:过滤器对所述http请求进行过滤处理后,调用doFilter方法跳出过滤器,输出处理后的http请求给服务端的应用服务器处理业务逻辑;响应。
所述的共享session信息的方法,其中,在所述步骤C之后还包括:
在Session信息的存取空间已经从原来的应用服务器内存更改为memcache服务器后,应用服务器对所述http请求进行相应的业务处理,响应客户端;处理业务时,应用服务器根据会话ID从memcache服务器中存取对应的session信息。
一种用于实现共享session信息的***,其包括:
客户端,用于发起http请求;
服务端包括:
http服务器,用于将客户端发起的http请求中转给过滤器;
过滤器,用于拦截所述http请求的请求信息和响应信息,根据该会话ID更改包含用户信息的session信息的存取空间,将存取空间从应用服务器内存更改为用于存储session信息的memcahce服务器,以及对所述http请求进行过滤处理后输出给服务端的应用服务器;
应用服务器, 用于处理业务逻辑并对客户端响应。
相较于现有技术,本发明提供的共享session信息的方法和***,在服务端增加过滤器和memcache服务器,当客户端发起http请求时,通过过滤器拦截http服务器中转的http请求,根据会话ID将session信息的存取空间从应用服务器内存更改为memcahce服务器、并通过会话ID将session信息与客户端绑定,从而每个客户端只有一份session信息,所有应用服务器共享该份session信息,不仅解决了服务器间session信息不能共享的问题,还避免了现有技术中增加带宽消耗、session信息延迟、单点故障、依赖特定web应用服务器等弊端。
附图说明
图1为现有技术解决session信息共享问题的方案一的示意图。
图2为现有技术解决session信息共享问题的方案二的示意图。
图3为现有技术解决session信息共享问题的方案三的示意图。
图4为本发明提供的共享session信息的方法较佳实施例的流程图。
图5为本发明提供的共享session信息的方法中S200的方法流程图。
图6为本发明提供的共享session信息的方法中S203的方法流程图。
图7为本发明提供的用于实现共享session信息的***的较佳实施例的示意图。
具体实施方式
本发明提供一种共享session信息的方法和***,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
本发明提供的共享session信息的方法和***,在现有的服务端中增加过滤器和memcache服务器,在响应之前通过过滤器拦截客户端发出的http请求,根据会话ID更改sesssion信息的存取空间,由应用服务器内存更改到memcache服务器,其改变了现有session信息的保存方式,实现方式简单且不依赖任何特定的服务器,能适用于所有的web应用服务器。请参阅图4,所述的共享session信息的方法,包括:
S100、客户端发起http请求,通过服务端的http服务器将所述http请求中转给服务端的过滤器;
S200、所述过滤器拦截所述http请求的请求信息和响应信息,根据会话ID更改包含用户信息的session信息的存取空间,将存取空间从应用服务器内存更改为用于存储session信息的memcache服务器;
S300、过滤器对所述http请求进行过滤处理后输出给服务端的应用服务器,所述应用服务器根据http请求处理业务逻辑并对客户端响应。
本实施例中,所述客户端为PC(personal computer),个人计算机),用户通过客户端浏览网页时发出相应http请求。通常一个PC对应一个会话ID(也叫会话的标识),发出http请求时会携带该PC的会话ID。http服务器将所述http请求中转给过滤器进行拦截,修改session信息的存取空间。http请求被服务端接收以后,其信息会保存在request对象(表示请求)和response对象(表示响应)中;过滤器实际是拦截这个两个对象。所述session信息通常是指用户的账号、登陆状态等用户信息,也可以保存其他的特殊信息。请参阅图5、则所述步骤S200具体包括:
S201、所述过滤器拦截所述http请求。
S202、判断是否已产生会话ID,若已产生会话ID,则执行S203;若没有产生会话ID则生成一会话ID;
本实施例需要通过该会话ID来提取session信息,需要先判断http请求中是否已包含了会话ID(该会话ID保持全局唯一即可,不限定名称,只要不和其他变量冲突即可);其具体包括:过滤器读取所述http请求的cookie,从cookie中获取该会话ID(以jsid表示)。判断所述会话ID的值是否为0:若是(值为0则表示客户端不包含所述会话ID),则生成全局唯一的会话ID,将该会话ID的值作为session信息存储到memcache服务器的key值,并将该会话ID的值写入cookie,并保存至客户端;否则(值不为0则表示已有会话ID),执行S203。
生成的ID的值是一个既不会重复,又不容易被找到规律以仿造的字符串;其作为缓存session信息到memcache服务器的key值并返回客户端保存,相当于该key值对应memcache服务器内的一个存储空间,将session信息存储到该存储空间内。由于ID的值与客户端一一对应,这样就在memcache服务器内为该客户端分配了一个固定的存储空间来存储该客户端的session信息。
S203、以所述ID标记session信息的存储地址,使session信息的存储空间从服务器内存更改为memcache服务器。
具体实施时,所述S203是以所述ID和原生request对象为构造参数创建HttpServletRequestWrapper对象,从而使session信息的存储空间从服务器内存更改为memcache服务器。所述原生request对象是HttpServletRequest类的实例,属于javaEE架构体系的原生对象,是有关于客户端所发出的http请求的对象,只要是有关于客户端http请求的信息,都可以藉由它来取得,例如http请求标头、http请求方法、http请求参数、使用者IP等信息。为了实现把session信息的存取空间从服务器内存改成memcache服务器,可按照以下方式分别实现HttpServletRequestWrapper类,HttpMemSessionWrapper类,MemcachedSessionFilter类,MemcacheManager类。在此之前,需要先创建于用于截获来自客户端的http请求的MemcachedSession Filter类。
所述MemcachedSessionFilter类为一个servlet过滤器组件,其用于截获来自客户端的http请求。该MemcachedSessionFilter类的核心是doFilter方法,后续提及的调用过滤器即是执行该doFilter方法。该doFilter方法在任何情况下都会被执行。原生的request,response对象是该doFilter方法的默认入参,它们在http请求被创建的时候就已经存在。此时需要创建HttpServletRequestWrapper对象的实例来代替原生的request对象,原生的response对象不作任何改变,继续传递使用。
实现MemcachedSessionFilter类的方法包括:
先声明MemcachedSessionFilter类继承自HttpServlet类。其中,所述HttpServlet类属于javaEE架构体系原生类,本实施例中需要继承HttpServlet类,并实现Filter接口。所述Filter接口属于javaEE架构体系原生接口,本实施例中需要实现Filter接口。为了表明MemcachedSessionFilter类必须要继承HttpServlet类,需要先声明。
接着实现MemcachedSessionFilter类的doFilter方法;其具体包括:先从cookie中查找会话ID,判断会话ID的值为空或者等于0时,生成全局唯一的会话ID,并保存到客户端。再以生成的会话ID和原生request对象作为构造参数,创建HttpServletRequestWrapper类的实例来代替原生的request对象。最后以newRequest子类对象(即HttpServletRequestWrapper类的实例)和原生的response对象作为参数,调用过滤器执行链对象的doFilter方法。调用的伪代码为filterChain.doFilter(newRequest,response),其中,response对象仍然是原生的response对象,未作任何改变。
最后将过滤器配置到应用服务器中,使过滤器生效。
所述MemcachedSession Filter类实现的功能有:截获来自客户端的http请求;生成会话ID;根据会话ID修改session信息的存取空间;创建HttpServletRequestWrapper类的实例(以newRequest子类对象表示)来代替原生request对象,作为过滤器doFilter(newRequest,response)方法的参数。其中,newRequest子类对象即为被创建出的HttpServletRequestWrapper类的实例;response是HttpServletResponse类(此为现有技术,属于原生对象,从http请求被创建以后就一直存在,直到http请求响应结束;本发明直接使用该类)的实例,属于JavaEE体系架构的原生对象,是有关于对客户端http请求之响应,可以利用它来设定一些要响应的讯息,例如标题信息、响应状态码等。
请同时参阅图6、接着需要对HttpServletRequestWrapper类、MemcacheManager类、HttpMemSessionWrapper类进行相应的处理,则所述S203具体包括:
S2031、继承原生request对象和session对象,设置继承得到的子类对象分别为newRequest子类对象和newSession子类对象。所述继承是指一个对象直接使用另一对象的属性和方法。
所述S2031相当于创建HttpServletRequestWrapper类,重写HttpServletRequestWrapper类的getSession信息方法。由于现有技术中session信息是保存在session对象中,而本发明需要改变session对象的存储空间,而HttpServletRequestWrapper类的作用即是:返回通过会话ID标记了session信息存储地址的session对象。其中,重写的含义为:方法重写又称方法覆盖,若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。该 S2031中所述HttpServletRequestWrapper类继承自HttpServletRequest(javaEE架构体系的原生类)类;重写HttpServletRequestWrapper类的getSession信息方法,通过该方法返回HttpMemSessionWrapper类的实例。实现HttpServletRequestWrapper类的方法包括:
先声明HttpServletRequestWrapper类继承自javax.servlet.http.HttpServletRequestWrapper类。其中,所述javax.servlet.http.HttpServletRequestWrapper类属于javaEE架构体系原生类,本实施例中需要继承该类。
接着定义第一成员变量jsid,第一成员变量jsid表示会话ID。也即是说,所述的newRequest子类对象中包括第一成员变量jsid,第一成员变量jsid的值与所述的会话ID的值相等。
然后实现HttpServletRequestWrapper类的构造方法,在该构造方法中以过滤器拦截http请求获取的会话ID和http请求对象来初始化该HttpServletRequestWrapper类的第一成员变量jsid和父类的request成员变量。
最后重写HttpServletRequestWrapper类的getSession方法。其中,所述getSession方法的实现流程如下:先调用父类的getSession方法获取原生的session对象s1;接着以会话ID和所述session对象s1作为HttpSessionMemWrapper类的构造方法的参数,创HttpSessionMemWrapper类的实例s2(s2表示该实例的名称);最后返回实例s2。
S2032、在所述newSession子类对象中,重写父类中存取session信息的方法,使得在newSession子类对象中存取session信息的空间从应用服务器内存转移到memcache服务器;在memcache服务器所占用的空间由所述会话ID标记。
所述S2032相当于创建用于初始化和销毁memcache客户端的MemcacheManager类。所述memcache客户端是指操作memcache服务器的客户端软件,使用memcache客户端之前需要初始化,然后创建它,用完以后需要销毁它。
所述MemcacheManager类除了用于初始化和销毁memcache客户端,还能提供操作缓存的API(应用程序接口)方法。所述API方法也叫工具方法,是指缓存客户端软件提供给用户操作缓存的方法;例如增加、替换、删除缓存等操作。因此,需要在MemcacheManager类中实现用于在所述的newSession子类对象中直接操作memcache服务器的工具类。所述工具类包括提供获取、替换、删除、保存缓存操作。也即是说,所述API方法包括读缓存,写缓存,替换缓存,移除缓存等操作,相当于对memcache服务器内缓存的session信息进行读、写、替换、移除等操作。在具体实施时,所述实现MemcacheManager类的方法包括:
先声明MemcacheManager类;
接着实现 getMemCachedClient方法。所述getMemCachedClient方法用于返回操作缓存的工具,无入参,其返回缓存客户端对象mc。所述mc为现有技术,其实现采用开源技术,实现方式是公开的,此处对此不作详述。
然后实现getSession方法(即获取session信息)。该getSession方法的入参是会话ID,通过会话ID获取session信息。其中,所述getSession方法的实现流程包括:先调用所述getMemCachedClient方法,获取缓存客户端对象;接着调用缓存客户端对象的getSession方法,获取session信息;最后将map对象作为session信息返回;其中,所述map对象为session信息的数据结构。
再然后实现saveSession方法(即保存session信息)。该saveSession方法的入参是会话ID和待保存的session信息,其无返回值。其中,所述的saveSession方法的实现流程包括:先调用所述getMemCachedClient方法,获取缓存客户端对象;接着调用缓存客户端对象的replace方法替换旧的session信息。
最后实现removeSession方法(即移除session信息)。该removeSession方法的入参是会话ID,通过会话ID删除相应的session信息,其无返回值。其中,所述的removeSession方法的实现流程包括:先调用所述getMemCachedClient方法,获取缓存客户端对象;然后调用缓存客户端对象的delete方法删除session信息。
S2033、在所述newRequest子类对象中,重写父类中的获取session对象实例的方法;在newRequest子类对象的该方法中,返回newSession子类对象的实例。
所述S2033相当于创建HttpMemSessionWrapper类;重写HttpMemSessionWrapper类的getAttribute方法、setAttribute方法、getAttributeNames方法、invalidate方法。所述HttpMemSessionWrapper类继承自HttpSession接口(javaEE架构的体系的原生接口)的实现类HttpSessionWrapper。newSession子类对象中包括第一成员变量jsid和第二成员变量map,相当于在HttpMemSessionWrapper类中设置这两个成员变量jsid和map。其中,第一成员变量jsid为存储session信息到memcache中的key值,也即是上述的会话ID的值。jsid是一个变量名称,实现者可以自定义该名称。第二成员变量map为保存session信息的数据结构。memcache服务器中实际存储的即是map。
在HttpMemSessionWrapper类中须重写getAttribute、setAttribute、getAttributeNames、invalidate,removeAttribute等几个方法,使得用户可用直接从memcache服务器中读取和删除session信息。
其中,重写getAttribute方法即是根据存储在session中的对象的key值,获取对应的对象。实现HttpMemSessionWrapper类的方法包括:
先声明HttpMemSessionWrapper类继承自HttpSessionWrapper类(其属于javaEE架构体系原生类,本实施例中需要继承它)。
接着定义第一成员变量jsid和第二成员变量map。第一成员变量jsid表示会话ID(也相当于memcache服务器的key值),map表示保存session信息的数据结构。
然后着实现该HttpMemSessionWrapper类的构造方法。在构造方法中初始化第一成员变量jsid和第二成员变量map。
最后是重写方法,包括:
重写getAttribute方法。该getAttribute方法是根据传入参数作为key值,从保存session信息的map中查找对应的对象并返回。
重写getAttributeNames方法。该getAttributeNames方法是获取所有存储到session中的对象的key值的集合,则通过该getAttributeNames方法返回一个集合。
重写invalidate方法。该invalidate方法是将缓存中的session信息清空。该invalidate方法需返回值。其中,invalidate方法的实现流程为:先清空map中的数据;然后调用MemcacheManager类的removeSession方法,清空缓存中的数据。
重写setAttribute方法。该setAttribute方法是将对象保存到session中。该invalidate方法需返回值。其中,setAttribute方法的实现流程包括:先将对象以键/值对的方式保存到map中。接着调用MemcacheManager类的saveSession方法,将map保存到缓存中。
具体实施时,所述重写HttpMemSessionWrapper类的getAttribute方法、setAttribute方法、getAttributeNames方法、invalidate方法时,removeAttribute方法,调用MemcacheManager类的API来操作缓存。
通过上述S203,即可将session信息的存储空间从服务器内存更改为memcache服务器,对memcache服务器中的session信息实现读、写、替换、删除、与会话ID绑定等操作。之后需跳出过滤器,将过滤后的http请求传输给应用服务器响应,则所述步骤S300具体包括:过滤器对所述http请求进行过滤处理后,调用doFilter方法跳出过滤器,输出处理后的http请求给服务端的应用服务器处理业务逻辑并对客户端响应。此时若需要对session信息进行操作(包括读取,修改,删除,销毁),将直接操作memcache服务器中对应的session信息。
通过上述实施例可明确各类的关系为:MemcachedSessionFilter类与HttpServletRequestWrapper类存在依赖关系。HttpServletRequestWrapper类实现了HttpServletRequest接口。HttpServletRequestWrapper类与HttpSessionMemWrapper类存在依赖关系。HttpSessionMemWrapper类与HttpSessionWrapper类存在继承关系,HttpSessionMemWrapper类是HttpSessionWrapper类的子类。HttpSessionWrapper类与HttpSession类存在实现关系,同时又存在合成关系。MemcacheManager类作为单例的工具类,其他各类可直接调用MemcacheManager类。
doFilter方法即为doFilter(newRequest,response)方法。跳出过滤器后继续往下执行,即步骤S300之后还包括:在Session信息的存取空间已经从原来的应用服务器内存更改为memcache服务器后,应用服务器对所述http请求进行相应的业务处理,响应客户端;处理业务时,应用服务器根据会话ID从memcache服务器中存取对应的session信息。应用服务器处理业务逻辑,必要时需要操作(包括读取,修改,删除,销毁)session信息时,则从memcahce服务器中读取出session信息,并进行相应操作,最后响应客户端。这样就完成了一个http请求响应的全过程。
本发明的改进点即是,在http请求响应之前,通过过滤器拦截http请求,并通过会话ID修改session信息的存取空间,由应用服务器内存更改到memcache服务器;并以会话ID的值对该session信息进行标识、便于与其他客户端进行区分。当http请求传递到后端应用服务器以后,应用服务器根据会话ID,从memcahce服务器中提取session信息,若有必要,将对session信息做一些常规的操作(包括读取,修改,删除,销毁),相关操作的结果将直接保存到memcache服务器中。这样将达到统一管理session信息的目的。并当多台应用服务器同时提供响应服务时,由于响应前已将各个客户端的session信息集中存储在memcache服务器中进行管理。对于客户端而言,无论客户端发出的http请求被哪一台应用服务器响应处理,每个客户端只有一份session信息,相当于所有应用服务器都共享了这一份session信息,也就解决了服务器间session信息不能共享的问题。而采用过滤器结合memcache服务器实现的session共享的方法,不仅解决了session共享的问题,而且避免了增加带宽消耗、session信息延迟、单点故障、依赖特定web应用服务器等弊端。
请参阅图7,基于上述的共享session信息的方法,本发明还相应提供一种用于实现共享session信息的***,其包括客户端100和服务端,所述服务端包括:http服务器200、过滤器300、memcache服务器400和应用服务器500。所述应用服务器500为多个,本实施例中仅列出3个应用服务器(501、502、503)为示例。
其中,由客户端100发起http请求,通过http服务器200将客户端100发起的http请求中转给过滤器300。中转后由过滤器300拦截所述http请求的请求信息和响应信息, 根据会话ID更改 包含用户信息的的session信息的存取空间,将存取空间从应用服务器内存更改到memcache服务器。memcache服务器400存储所述session信息。过滤器300对所述http请求进行过滤处理后输出给服务端的应用服务器(如应用服务器501),应用服务器处理业务逻辑,必要时需要操作(包括读取,修改,删除,销毁)session信息时,则从直接从memcahce服务器中读取出session信息,并进行相应操作,最后响应客户端。
综上所述,本发明在服务端增加过滤器和memcache服务器,当客户端发起http请求,在http请求响应之前,通过过滤器拦截http请求,并通过会话ID修改session信息的存取空间,由应用服务器内存更改到memcache服务器;并以ID的值对该session信息进行标识、便于与其他客户端进行区分。当http请求传递到后端应用服务器以后,应用服务器根据会话ID,从memcahce中提取session信息,若有必要,将对session信息做一些常规的操作(包括读取,修改,删除,销毁),相关操作的结果将直接保存到memcache中。这样将达到统一管理session信息的目的。并这样当多台应用服务器同时提供响应服务时,由于响应前已将各个客户端的session信息集中存储在memcache服务器中进行管理。对于客户端而言,无论客户端发出的http请求被哪一台应用服务器响应处理,每个客户端只有一份session信息且通过ID将session信息与客户端绑定,相当于所有应用服务器都共享了这一份session信息,不仅解决了服务器间session信息不能共享的问题;而且采用过滤器与memcache服务器结合的方式还能避免现有技术中解决session信息共享方式导致的增加带宽消耗、session信息延迟、单点故障、依赖特定web应用服务器等问题。
可以理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案及其发明构思加以等同替换或改变,而所有这些改变或替换都应属于本发明所附的权利要求的保护范围。
Claims (10)
1.一种共享session信息的方法,其特征在于,包括:
A、客户端发起http请求,通过服务端的http服务器将所述http请求中转给服务端的过滤器;
B、所述过滤器拦截所述http请求的请求信息和响应信息,根据会话ID更改包含用户信息的session信息的存取空间,将存取空间从应用服务器内存更改为用于存储session信息的memcache服务器;
C、过滤器对所述http请求进行过滤处理后输出给服务端的应用服务器,所述应用服务器根据http请求处理业务逻辑并对客户端响应。
2.根据权利要求1所述的共享session信息的方法,其特征在于,所述步骤B具体包括:
B1、所述过滤器拦截所述http请求;
B2、判断是否已产生会话ID,若已产生会话ID,则执行B3;若没有产生会话ID则生成一会话ID;
B3、以所述会话ID标记session信息的存储地址,使session信息的存储空间从服务器内存更改为memcache服务器。
3. 根据权利要求2所述的共享session信息的方法,其特征在于,所述步骤B2具体包括:
B21、过滤器读取所述http请求中对应的cookie,从cookie中获取该会话ID;
B22、判断所述会话ID的值是否为0:若是,则生成全局唯一的会话ID,将该会话ID的值作为session信息存储到memcache服务器的key值,并将该会话ID的值写入cookie,并保存至客户端;否则,执行步骤B3。
4.根据权利要求2所述的共享session信息的方法,其特征在于,所述步骤B3具体包括:
B31 继承原生request对象和session对象,设置继承得到的子类对象分别为newRequest子类对象和newSession子类对象;
B32 在所述newSession子类对象中,重写父类中存取session信息的方法,使得在newSession子类对象中存取session信息的空间从应用服务器内存转移到memcache服务器;在memcache服务器所占用的空间由所述会话ID标记;
B33 在所述newRequest子类对象中,重写父类中的获取session对象实例的方法;在newRequest子类对象的该方法中,返回newSession子类对象的实例。
5.根据权利要求4所述的共享session信息的方法,其特征在于,所述的newRequest子类对象中包括第一成员变量jsid,第一成员变量jsid的值与所述的会话ID的值相等。
6.根据权利要求4所述的共享session信息的方法,其特征在于,还包括:实现用于在所述的newSession子类对象中直接操作memcache服务器的工具类;所述工具类包括提供获取、替换、删除、保存缓存操作。
7.根据权利要求4所述的共享session信息的方法,其特征在于,所述newSession子类对象中包括第一成员变量jsid和第二成员变量map;其中,第一成员变量jsid为存储session信息到memcache中的key值,第二成员变量map为保存session信息的数据结构。
8.根据权利要求1所述的共享session信息的方法,其特征在于,所述步骤C具体包括:过滤器对所述http请求进行过滤处理后,调用doFilter方法跳出过滤器,输出处理后的http请求给服务端的应用服务器处理业务逻辑;响应。
9.根据权利要求1所述的共享session信息的方法,其特征在于,在所述步骤C之后还包括:
在Session信息的存取空间已经从原来的应用服务器内存更改为memcache服务器后,应用服务器对所述http请求进行相应的业务处理,响应客户端;处理业务时,应用服务器根据会话ID从memcache服务器中存取对应的session信息。
10.一种用于实现共享session信息的***,其特征在于,包括:
客户端,用于发起http请求;
服务端包括:
http服务器,用于将客户端发起的http请求中转给过滤器;
过滤器,用于拦截所述http请求的请求信息和响应信息,根据该会话ID更改包含用户信息的session信息的存取空间,将存取空间从应用服务器内存更改为用于存储session信息的memcahce服务器,以及对所述http请求进行过滤处理后输出给服务端的应用服务器;
应用服务器, 用于处理业务逻辑并对客户端响应。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310725271.9A CN103685304A (zh) | 2013-12-25 | 2013-12-25 | 一种共享session信息的方法和*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310725271.9A CN103685304A (zh) | 2013-12-25 | 2013-12-25 | 一种共享session信息的方法和*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103685304A true CN103685304A (zh) | 2014-03-26 |
Family
ID=50321618
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310725271.9A Pending CN103685304A (zh) | 2013-12-25 | 2013-12-25 | 一种共享session信息的方法和*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103685304A (zh) |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104468804A (zh) * | 2014-12-15 | 2015-03-25 | 浪潮通用软件有限公司 | 一种web服务器、处理用户会话的方法及*** |
CN105208058A (zh) * | 2014-06-19 | 2015-12-30 | ***股份有限公司 | 基于web会话共享的信息交互*** |
CN105338095A (zh) * | 2015-11-17 | 2016-02-17 | 中国建设银行股份有限公司 | 一种会话数据处理方法和装置 |
CN105357222A (zh) * | 2015-11-27 | 2016-02-24 | 国网信息通信产业集团有限公司 | 一种分布式Session管理中间件 |
CN105516264A (zh) * | 2015-11-30 | 2016-04-20 | 努比亚技术有限公司 | 分布式集群***下的session共享方法、装置及*** |
CN106453661A (zh) * | 2016-12-09 | 2017-02-22 | 北京酷我科技有限公司 | 一种http服务器集群的会话管理方法 |
WO2017036059A1 (zh) * | 2015-09-01 | 2017-03-09 | 北京国双科技有限公司 | 监测用户访问行为的方法、装置、终端设备及*** |
CN106598966A (zh) * | 2015-10-14 | 2017-04-26 | 阿里巴巴集团控股有限公司 | 一种网页处理方法和装置 |
CN107395711A (zh) * | 2017-07-17 | 2017-11-24 | 中国农业银行股份有限公司 | 异构***会话存取方法及相关装置 |
CN107547579A (zh) * | 2016-06-23 | 2018-01-05 | 北京京东尚科信息技术有限公司 | 用于控制web***的响应数据流的方法和装置 |
CN108259616A (zh) * | 2018-01-26 | 2018-07-06 | 中企动力科技股份有限公司 | 会话共享方法、装置、电子设备及可读存储介质 |
CN109617953A (zh) * | 2018-11-28 | 2019-04-12 | 亚信科技(南京)有限公司 | 一种会话处理方法和*** |
CN109951567A (zh) * | 2019-04-02 | 2019-06-28 | 山东浪潮云信息技术有限公司 | 一种双数据中心应用部署方法 |
CN111565209A (zh) * | 2019-08-29 | 2020-08-21 | 杭州天宽科技有限公司 | 客户端即时通信方法、装置、设备及介质 |
CN112437092A (zh) * | 2020-12-03 | 2021-03-02 | 许昌学院 | 分布式***共享session无侵入方法 |
CN112929453A (zh) * | 2021-03-26 | 2021-06-08 | 建信金融科技有限责任公司 | 一种共享session数据的方法和装置 |
CN115242876A (zh) * | 2022-07-21 | 2022-10-25 | 武汉众邦银行股份有限公司 | 一种基于redis来实现会话共享的方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060080664A1 (en) * | 1998-01-16 | 2006-04-13 | Aspect Communications Corporation | Methods and apparatus for enabling dynamic resource collaboration |
CN101039317A (zh) * | 2006-03-14 | 2007-09-19 | 中兴通讯股份有限公司 | 无线应用协议网关浏览业务cookie的实现方法 |
CN103067375A (zh) * | 2012-12-26 | 2013-04-24 | 北京思特奇信息技术股份有限公司 | 一种网络节点间进行连接会话的方法及装置 |
CN103200212A (zh) * | 2012-01-04 | 2013-07-10 | ***通信集团公司 | 一种在云计算环境下实现分布式会话的方法和*** |
-
2013
- 2013-12-25 CN CN201310725271.9A patent/CN103685304A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060080664A1 (en) * | 1998-01-16 | 2006-04-13 | Aspect Communications Corporation | Methods and apparatus for enabling dynamic resource collaboration |
CN101039317A (zh) * | 2006-03-14 | 2007-09-19 | 中兴通讯股份有限公司 | 无线应用协议网关浏览业务cookie的实现方法 |
CN103200212A (zh) * | 2012-01-04 | 2013-07-10 | ***通信集团公司 | 一种在云计算环境下实现分布式会话的方法和*** |
CN103067375A (zh) * | 2012-12-26 | 2013-04-24 | 北京思特奇信息技术股份有限公司 | 一种网络节点间进行连接会话的方法及装置 |
Cited By (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105208058B (zh) * | 2014-06-19 | 2018-10-23 | ***股份有限公司 | 基于web会话共享的信息交互*** |
CN105208058A (zh) * | 2014-06-19 | 2015-12-30 | ***股份有限公司 | 基于web会话共享的信息交互*** |
CN104468804A (zh) * | 2014-12-15 | 2015-03-25 | 浪潮通用软件有限公司 | 一种web服务器、处理用户会话的方法及*** |
WO2017036059A1 (zh) * | 2015-09-01 | 2017-03-09 | 北京国双科技有限公司 | 监测用户访问行为的方法、装置、终端设备及*** |
US11044330B2 (en) | 2015-09-01 | 2021-06-22 | Beijing Gridsum Technology Co., Ltd. | Method, device, terminal equipment and system for monitoring user's access behavior |
CN112231606A (zh) * | 2015-10-14 | 2021-01-15 | 创新先进技术有限公司 | 一种网页处理方法和装置 |
CN106598966B (zh) * | 2015-10-14 | 2020-09-01 | 阿里巴巴集团控股有限公司 | 一种网页处理方法和装置 |
CN106598966A (zh) * | 2015-10-14 | 2017-04-26 | 阿里巴巴集团控股有限公司 | 一种网页处理方法和装置 |
CN112231606B (zh) * | 2015-10-14 | 2024-03-12 | 创新先进技术有限公司 | 一种网页处理方法和装置 |
CN105338095A (zh) * | 2015-11-17 | 2016-02-17 | 中国建设银行股份有限公司 | 一种会话数据处理方法和装置 |
CN105357222A (zh) * | 2015-11-27 | 2016-02-24 | 国网信息通信产业集团有限公司 | 一种分布式Session管理中间件 |
CN105516264A (zh) * | 2015-11-30 | 2016-04-20 | 努比亚技术有限公司 | 分布式集群***下的session共享方法、装置及*** |
CN107547579A (zh) * | 2016-06-23 | 2018-01-05 | 北京京东尚科信息技术有限公司 | 用于控制web***的响应数据流的方法和装置 |
CN107547579B (zh) * | 2016-06-23 | 2021-01-26 | 北京京东尚科信息技术有限公司 | 用于控制web***的响应数据流的方法、装置和计算机可读存储介质 |
CN106453661A (zh) * | 2016-12-09 | 2017-02-22 | 北京酷我科技有限公司 | 一种http服务器集群的会话管理方法 |
CN107395711A (zh) * | 2017-07-17 | 2017-11-24 | 中国农业银行股份有限公司 | 异构***会话存取方法及相关装置 |
CN108259616A (zh) * | 2018-01-26 | 2018-07-06 | 中企动力科技股份有限公司 | 会话共享方法、装置、电子设备及可读存储介质 |
CN108259616B (zh) * | 2018-01-26 | 2021-06-15 | 中企动力科技股份有限公司 | 会话共享方法、装置、电子设备及可读存储介质 |
CN109617953A (zh) * | 2018-11-28 | 2019-04-12 | 亚信科技(南京)有限公司 | 一种会话处理方法和*** |
CN109617953B (zh) * | 2018-11-28 | 2021-08-31 | 亚信科技(南京)有限公司 | 一种会话处理方法和*** |
CN109951567A (zh) * | 2019-04-02 | 2019-06-28 | 山东浪潮云信息技术有限公司 | 一种双数据中心应用部署方法 |
CN111565209A (zh) * | 2019-08-29 | 2020-08-21 | 杭州天宽科技有限公司 | 客户端即时通信方法、装置、设备及介质 |
CN112437092A (zh) * | 2020-12-03 | 2021-03-02 | 许昌学院 | 分布式***共享session无侵入方法 |
CN112929453A (zh) * | 2021-03-26 | 2021-06-08 | 建信金融科技有限责任公司 | 一种共享session数据的方法和装置 |
CN115242876A (zh) * | 2022-07-21 | 2022-10-25 | 武汉众邦银行股份有限公司 | 一种基于redis来实现会话共享的方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103685304A (zh) | 一种共享session信息的方法和*** | |
JP6272933B2 (ja) | 遠隔ブラウジングセッション管理 | |
CN103329113B (zh) | 配置用于分级高速缓存的代理服务器以及动态站点加速和自定义对象和相关的方法 | |
CN110958218B (zh) | 基于多网通信的数据传输方法及相关设备 | |
CN113010818B (zh) | 访问限流方法、装置、电子设备及存储介质 | |
CN103338249B (zh) | 缓存方法及装置 | |
CN107315972B (zh) | 一种大数据非结构化文件动态脱敏方法及*** | |
CN106294365A (zh) | 一种单页web应用的页面数据处理方法及设备 | |
CN106506703A (zh) | 基于共享内存的服务发现方法、装置及***、服务器 | |
CN106933871A (zh) | 短链接处理方法、装置及短链接服务器 | |
CN106656920B (zh) | Http服务的处理方法、装置、存储介质及处理器 | |
CN102624918A (zh) | 一种基于url重写技术的代理访问方法 | |
CN109600385B (zh) | 一种访问控制方法及装置 | |
CN105868234A (zh) | 缓存数据的更新方法及装置 | |
CN106909690A (zh) | 网络数据缓存方法 | |
CN106789227A (zh) | 一种上网行为分析方法及上网行为分析装置 | |
CN104994139A (zh) | 一种对高并发网络请求发快速响应的*** | |
WO2023056797A1 (zh) | 基于区块链的数据处理方法、装置、设备及存储介质 | |
CN109634753B (zh) | 切换浏览器内核的数据处理方法、装置、终端和存储介质 | |
CN109522501A (zh) | 页面内容管理方法及其装置 | |
US20100036892A1 (en) | Determination of an updated data source from disparate data sources | |
CN106446075A (zh) | 页面请求处理方法及装置 | |
CN107070991A (zh) | 网络数据缓存装置与*** | |
CN113821307B (zh) | 一种虚拟机镜像的快速导入方法、装置及设备 | |
CN105184559B (zh) | 一种支付***及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140326 |
|
RJ01 | Rejection of invention patent application after publication |