Session服务器配置指南与使用经验
来源:asp之家 发布时间:2009-07-23 09:34:00
一.摘要
所有Web程序都会使用Session保存数据. 使用独立的Session服务器可以解决负载均衡场景中的Session共享问题.本文介绍.NET平台下建立Session服务器的几种办法, 并介绍在使用Session时的各种经验和技巧.
二.关于Session,SessionID和Cookies
Session数据保存在服务器端, 但是每一个客户端都需要保存一个SessionID, SessionID保存在Cookies中, 关闭浏览器时过期.
在向服务器发送的HTTP请求中会包含SessionID, 服务器端根据SessionID获取获取此用户的Session信息.
很多初级开发人员不知道SessionID和Cookies的关系, 所以常常认为两者没有联系. 这是不正确的. 正是因为SessionID保存在Cookies中, 所以在我们保存Cookies的时候,一定要注意不要因为Cookies的大小和个数问题而导致SessionID对象. 在我们的程序中, 对SessionID的Cookies有特殊的处理:
/// <summary>
/// 写入cookie.
/// </summary>
/// <param name="day"></param>
/// <returns></returns>
public bool SetCookie(int day)
{
string CookieName = GetType().ToString();
HttpCookie SessionCookie = null;
//对 SessionId 进行备份.
if (HttpContext.Current.Request.Cookies["ASP.NET_SessionId"] != null)
{
string SesssionId = HttpContext.Current.Request.Cookies["ASP.NET_SessionId"].Value.ToString();
SessionCookie = new HttpCookie("ASP.NET_SessionId");
SessionCookie.Value = SesssionId;
}
//省略掉中间的代码部分.只保留备份SessionID和找回SessionID的逻辑
//如果cookie总数超过20 个, 重写ASP.NET_SessionId, 以防Session 丢失.
if (HttpContext.Current.Request.Cookies.Count > 20 && SessionCookie != null)
{
if (SessionCookie.Value != string.Empty)
{
HttpContext.Current.Response.Cookies.Remove("ASP.NET_SessionId");
HttpContext.Current.Response.Cookies.Add(SessionCookie);
}
}
return true;
}三.搭建Session服务器的几种方式
将Session保存在独立的服务器中可以实现在多台Web服务器之间共享Session.虽然我们也可以自己开发Session存储系统, 但是使用ASP.NET自带的存储机制将更加便捷.
.NET提供了5种保存Seission的方式:
方式名称
存储方式 性能
Off
设置为不使用Session功能
无
InProc
设置为将Session存储在进程内,就是ASP中的存储方式,这是默认值。
性能最高
StateServer
设置为将Session存储在独立的状态服务中。通常是aspnet_state.exe进程.
性能损失10-15%
SQLServer
设置将Session存储在SQL Server中。
性能损失10-20%
Customer
自定制的存储方案
由实现方式确定
我们可以在Web.Config中配置程序使用的Session存储方式.默认情况下是InProc, 即保存在IIS进程中. 关于Off, InProc和Customer本文不做讲解. 相关文章大家都可以在网上搜索到.
下面主要讲解 StateServer 和 SQLServer 的应用.
四.使用 StateServer 模式搭建Session服务器
(1)服务器端配置
1.启动 Asp.net State service服务.(这个服务默认的状态为手动.修改为自动并启动.)
2.修改注册表: [HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\aspnet_state\Parameters]
设置 AllowRemoteConnection = 1 , 设置 Port = 42424 (十进制,默认即为42424)
Port是服务的端口号
AllowRemoteConnection 表示是否允许其他机器连接,0为仅能本机使用,1为可以供其他机器使用.
(2)客户端设置
在Web应用程序的Web.Config中, 我们需要修改 / 的节点.如果没有
没有则添加(默认使用的是InProc方式)
mode="StateServer"
stateConnectionString="tcpip=服务器ip:42424"
cookieless="false"
timeout="60"/>
上面的参数我们可以根据需要修改.


猜你喜欢
- 10月22日消息,PCadvisor近日评出史上16个梦幻产品设计。以下为文章主要内容:苹果的设计对于苹果公司和苹果产品的用户来说,&
- 结合工作经验,在这里笔者给企业网管员提供一些保障企业网络安全的建议,帮助他们用以抵御网络入侵、恶意软件和垃圾邮件。定义用户完成相关任务的恰当
- Windows2000 域名解析是基于动态DNS,动态DNS的实现是基于RFC 2136基础上的。在Windows 2000下,动态DNS是
- 我们于9月28日再次对域名邮箱做了更新:1. 支持一个QQ绑定5个域名。2. 支持修改管理员帐户名。3. 解除了域名20个字符长度的限制4.
- 似乎正应了那句“你不理财,财不理你!”,从来没有指望google adsense能给我赚到钱,事实上它也没给我带来财富。 八月份的
- 1、复制配置文件到本用户环境下,再新建一个.vim文件夹,并创建bundle子文件夹sudo cp /etc/vim/vimrc /home
- 在与国内互联网用户研究同行交流时,常常会被问到“腾讯很早就拥有眼动仪了,那是不是经常用到它?”、“眼动研究的结果有什么特别的作用?”等之类的
- 腾讯科技讯(编译/中涛)北京时间5月20日消息,据国外媒体报道,微软必应地图(Bing Maps)技术主管克里斯·彭德尔顿(Chris Pe
- 前面说了启用Gzip 压缩减少带宽消耗以加速网站,今天说Windows2003服务器安装及设置教程——IIS优化第二篇:使用eAcceler
- 很多朋友想建ftp服务器在Internet上共享自己的资源,苦于没有公网IP,无法实现。其实,内网IP也可以建ftp服务器的。第一步:首先当
- 11月14日消息,据商业周刊报道,作为微软公司的一名全职员工、主席比尔·盖茨最后一次参加了股东大会。早在一年前,盖茨就表示也淡出微软公司,全
- 打开dede/inc/inc_batchup.php找到"//删除数据库的内容"前面加//删除缩略图 if($arcRo
- 今天向往常一样打开我的雅虎邮箱,看到一个标题是《phpwinds与贵站建议长期合作关系!》,phpwinds?是那个著名的php论坛吗?不过
- 近来关注了一些做外贸的企业的英文网站,发现了一些以前没有关注的问题。这些问题在笔者看来,对做外贸来说应该说是非常重要的。在这里,写出来与大家
- Alexa是目前最权威的全球网站排名机构。这家网站1996年4月在美国创立,1999年被亚马逊公司收购。自1997年9月开始通过专用的工具将
- 使用黑帽SEO的人,心里或多或少都存在一个假设,那就是搜索引擎没自己聪明。在前几天的搜索引擎怎样判断垃圾留言这个帖子里,就有读者认为我把搜索
- 一旦你精心建设好了自己的站点,就要把它发布出去。把你的Web站点提交给搜索引擎、目录和相关的站点是成功的关键。如果你用错误的方式推广自己站点
- 碰到CC攻击请把下面的代码放做成conn.asp,原理大家可以自己研究<% DimfsoObject DimtsObject dimf
- 认识站长朋友太多,赚钱多的、赚钱少的、做大的、做小的,各类都认识不少,自己也偶尔也被当作站长称呼,今天收到张翔寄来一本杂志,感慨万千,不吐不
- 回顾2007的互联网行业,从一个个鲜活的关键词开始。有的在牛A和牛C之间徘徊,有的还在摸爬滚打,有人脸上挂着泪,有人脸上笑开花,2007年的