码迷,mamicode.com
首页 > Web开发 > 详细

http服务器--session处理

时间:2015-06-02 00:31:20      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:http   http服务器   session   架构   

http服务器--session处理

1. 概述

Session处理是一般带有会话功能服务器必须处理的功能.使用session记录一个会话,能够有效处理短连接或者断线重连的需求。session是存放在服务器的内容,具有如下特性:

A. 时间性,创建的session如果长时间没有响应,则服务器需要删除该session,以防止session的无限增长。

B. 唯一性,在同一个服务器上,sessionId不能重复,如果重复就会出现歧义。

C. 全局性,对于是否为同一会话,服务器上只认sessionId是否一致,多个客户端也可以用同一个session

D. 安全性,session是存在于服务器端的,对客户端不可见,所有对客户端的操作都需要经过服务器的代码。

E. 数据类型无限制性,Session可以根据服务器的处理需求,存放任何类型的数据。

F. ....

 


2. Session的创建与释放

        在http服务器上,每一次交互都是基于会话的,所以对于每一个新的连接都需要创建一个session。一个session通过唯一的sesssionId标识,并通过cookie传递给客户端。对于老的连接,其sessionID可能已经被释放,服务器就需要为其创建新的session

        session的释放,只有两个条件:超时不响应和客户端强制释放。由于session具有全局性,其创建与释放必须互斥进行。Session的操作,也需要互斥进行,以防止内存的变化导致程序异常。

 

3. 本程序的实现

        基于上次发布的http开发sdk,这次特别完善session,使之成为一个实际可用的http服务器开发包。

一个session可能被多个客户端同时使用,如下图:

技术分享

        释放时需要等待所有客户端退出之后才能释放。我们采用引用计数的方式记录当前引用的客户端数量。在客户端连接成功后引用计数加一,断开连接后计数减一。在一个定时器中定时检查响应时间和引用计数值。

在上层使用session时,不需要关心session是如何创建如何释放的。只要按照规则实现session的创建和释放接口,具体如何调用由底层负责。

3.1. 上层实现的接口

3.1.1. 定义自己的session

        在该架构下,我们要求所有session类必须派生于CMfhHttpSession。在CMfhHttpSession类中会实现基本的session操作。当然为了方便编写程序,可以直接使用CMfhHttpSession类。如果需要对session做特殊处理,例如存放自定义格式的数据,就需要实现自己的session

 

3.1.2. 创建session接口

       Session是在会话处理类Httpbase中创建。我们只需要实现:

        Virtual CMfhHttpSessionCMfhHttpBase::CreateSession(charsessionId);方法即可。在该方法中只负责根据sessionId创建session,不需要关心何时调用该方法。

 

自定义的会话处理类派生于Httpbase,如果我们需要特殊处理session,则重新实现虚函数CreateSession,创建自己的session类。

 

3.1.3. Session的使用

        Session在创建之后,或者处理cookie时找到对应的session会保存在会话处理类中成员变量.m_session中。在会话处理时直接使用即可。

 


目前暂未发布开发包,后续会整理发布,如果需要可以与我联系,可先使用。

联系邮箱:wjh_2010@163.com

 

http服务器--session处理

标签:http   http服务器   session   架构   

原文地址:http://blog.csdn.net/wjh_monkey/article/details/46318309

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!