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"/>

上面的参数我们可以根据需要修改.

标签:Session,服务器配置,Web服务器
0
投稿

猜你喜欢

  • 从一个301重定向案例 看需要注意的地方

    2009-01-09 16:35:00
  • UCHome2.0新增投票功能及其使用技巧介绍

    2009-08-31 12:05:00
  • 建站先磨刀 网站整体策划注意的几个要点

    2009-01-21 15:37:00
  • 服务器管理最容易犯的十大错误(下)

    2010-08-17 18:45:00
  • 最全的ARP欺骗攻击原理深入分析

    2009-12-24 08:42:00
  • 让你的IIS服务器支持JSP

    2008-04-02 12:07:00
  • Discuz! 7.2图文安装教程

    2009-11-24 09:13:00
  • 正视SEO的发展与出路

    2007-10-15 12:39:00
  • 51.com宣称注册用户达1.6亿 存储图片110亿张

    2009-10-23 13:34:00
  • 用dedecms实现拼音显示文章标题页文件名的方法

    2010-12-08 16:40:00
  • dedecms文档页获取当前文章ID的sql语句

    2011-09-10 16:06:11
  • 阿江的Windows 2000服务器安全设置教程

    2009-12-20 19:16:00
  • 设计有别 英文建站与中文建站注意的细节

    2009-02-05 16:35:00
  • 为什么我们程序员难晋升

    2011-08-18 18:35:36
  • 教你买虚拟主机不会受骗的九个方法

    2010-03-23 18:59:00
  • 新版Firefox可侦测笔记本方向 传给应用程序

    2009-10-14 13:42:00
  • Discuz!如何添加论坛创始人 提升论坛安全级别

    2009-10-15 17:32:00
  • GoDaddy:如何添加一个Java Servlet

    2010-04-22 12:55:00
  • 20个实用的WordPress SQL查询

    2011-03-31 18:00:00
  • Textpattern 评测:身形轻巧功能强大 驾驭需技巧

    2011-07-22 16:53:51
  • asp之家 网站运营 m.aspxhome.com