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 CMfhHttpSession* CMfhHttpBase::CreateSession(char* sessionId);方法即可。在该方法中只负责根据sessionId创建session,不需要关心何时调用该方法。

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

3.1.3. Session的使用

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

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

联系邮箱:[email protected]

时间: 2024-10-12 15:45:48

http服务器--session处理的相关文章

集群服务器Session同步及一种基于Memcached的session同步

1 Session的集群管理 事实上,网站总是有状态的.每一个登录信息.用户信息常常被存储在session内部.而当一个网站被部署在不止一台服务器的时候,就会遇到session同步的问题.事实上即使一个很小的网站,也要至少有两台服务器互为备份,分单流量是必须得,更重要的是无缝切流量升级.为了保证服务的不间断又要进行网站的维护升级,切流量是最简单的.那么如何保证切流量的时候session也会跟着同步过去呢?在集群环境下,大致有以下几种手段 1.1 Session复制 这是一种在早期应用系统中使用较

用redis实现跨服务器session(转)

这个月我们新开发了一个项目,由于使用到了4台机器做web,使用dns做负载均衡, 上面图上用户通过DNS的调度(一个域名对应多个ip)分别访问到VM2-VM5上,四台机器都访问VM1上的redis,两个redis值主从结构. 因此需要使用跨服务器的session保存用户登录状态,于是我写了一个跨站的session共享的类 点击(此处)折叠或打开 <?php /* *用redis实现跨服务器session *注意需要安装phpredis模块 * *作者:yifangyou *日期:2012-07-

android 客户端(非浏览器)怎么与服务器session保持同步会话

============问题描述============ 小弟在做一个客户端的购物车功能,要获取到服务器session中保存的购物车列表,上传了sessionid却依旧没法获取到购物车,代码在下面: String urlString = "http://192.168.1.128:8080/Pinzhuo04/servlet/ShowCartServlet"; HttpURLConnection httpURLConnection = (HttpURLConnection) new U

PHP实现跨服务器session共享的方法教程

今天带来PHP实现跨服务器session共享的方法教程. 本文实例讲述了PHP实现cookie跨域session共享的方法.分享给大家供大家参考,具体如下: 做过web开发的小伙伴们都了解cookie和session,cookie是存储在客户端的,session是存储在服务器的. 本篇主要通过一些实践中的案例和大家分享一下踩到坑,重点说明了cookie跨域问题和session服务器共享问题,以php语言为使用语言进行说明. 先聊聊cookie 设置cookie无效 1 setcookie("ss

[转]session 持久化问题(重启服务器session 仍然存在)

转:http://xiaolongfeixiang.iteye.com/blog/560800 关于在线人数统计,大都使用SessionListener监听器实现. SessionListener 触发源:  1.Session Create 时 2.Session timeout 时 3.显式调用session的invalidate方法 时 4.在Tomcat设置Session持久化为FALSE的情况下,Tomcat关闭时,触发Session destroy事件 5.在Tomcat设置Sess

服务器session,Tomcat有自己的session维护机制,apache有自己的session维护机制

1.SESSION一般不是你说的这种工作方式,你打开一个浏览器,再打开一个,请求同一个网址,然后其中一个登陆,另外一个绝对不会也登陆.SESSION和浏览器本身这个程序就是挂钩的,一般不通过IP和端口去绑定(如果是端口和IP的话,浏览器关闭了SESSION也不一定会失效,显然有安全问题,这个是因为TCP协议的一些问题,很容易被利用到). 当浏览器和服务器联系的时候,服务器会发一个SESSIONID给浏览器,然后浏览器记录这个SESSIONID,每次访问的时候将ID附带过去.假如你想浏览器关闭后重

PHP实现多服务器SESSION共享

为什么要session共享? 现在稍微大一点的网站基本上都有好几个子域名,比如www.feiniu.com, search.feiniu.com, member.feiniu.com,这些网站如果需要共用用户登录信息,那么就需要做到session共享,当然前提是有相同的主域名. PHP的session原理? 客户端访问php页面,执行session_start,生成session_id,一般我们是把session_id存储到cookie上,session内容保存在服务端,客户端访问访问不同的页面

thinkphp 3.2 服务器 session 设置时间周期失效问题 服务器是linux windows 上暂时没有发现此类问题

今天有时间,写一下之前 用 TP3.2 版本 session 设置时间周期失效问题,希望可以帮助到有遇到过相同的问题的伙伴,让你们少走一些弯路 问题场景: 在这是使用 session 缓存的时候(文件缓存),设置的时间无效,也就是缓存不过期,变成了永久性缓存 举例说明: 比如这个,按照tp3.2的开发使用手册,$books 是一个 二维数组,本来想达到缓存 24小时的效果,但是没有到达自己预期的 说明:我本地window 开发 不存在这个问题,就是放在linux 服务器上就不行,开始分析的时候,

Redis 分布式缓存,是如何实现多台服务器SESSION 实时共享的

现在提到多服务器的共享session,几乎都是回答用redis.对于redis实现几台服务器共享session,不是很理解.假如一个网站分别部署在A B C 3 台服务器上,他们的代码都是相同的.用户在访问的过程中是随机切换到其他服务器,使用redis来共享session,那么是这3台服务器是如何实现session 实时共享的? 首先要明确session和cookie的区别.浏览器端存的是cookie每次浏览器发请求到服务端是http 报文头是会自动加上你的cookie信息的.服务端拿着用户的c