http服务器--session处理

36 篇文章 0 订阅
30 篇文章 0 订阅

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

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值