AdolphYang

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

   配置进程外Session:

    (1)将服务器Session信息存储在进程外    
        <1> 首先,开启asp.net state 服务: 控制面板 -> 程序和功能 -> “打开或者关闭 Windows 功能”对话框 -> Internet 信息服务 -> 万维网服务 -> 应用程序开发功能 -> ASP.NET。(Control Panel -> Programs - > Programs and Features -> Turn Windows features on or off - > Internet Information Services -> World Wide Web Services -> Application Development Features -> ASP.NET。)

        勾选 ASP.NET 选项后,在 Control Panel -> System and Security -> Administrative Tools -> Services 服务中就会出现 ASP.NET State Service 服务。

        在属性对话框中设置启动类型为自动(Automatic),最后启动。(备注:Windows XP 系统是在控制面板中的“添加和删除程序”中设置)


        <2> 然后,回到Web.config文件中上述的段落中,将mode的值改为StateServer。

    <sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"  timeout="20"></sessionState>

    保存文件后的重新打开一个IE,打开 SessionState.aspx页面,保存一些信息到Session中。这时,让我们重起IIS,再回到SessionState.aspx页面中查 看刚才的Session信息,发现没有丢失。    
         
        实际上,这种将Session信息存储在进程外的方式不光指可以将信息存储在本机的进程外,还可以将Session信息存储在其他的服务器的进程中。 这时,不光需要将mode的值改为StateServer,还需要在stateConnectionString中配置相应的参数。例如你的计算你是 192.168.0.1,你想把Session存储在IP为192.168.0.2的计算机的进程中,就需要设置成这 样:stateConnectionString="tcpip=192.168.0.2:42424"。当然,不要忘记在192.168.0.2的计算 机中装上.NET   Framework,并且启动ASP.NET   State   Services服务。    
         
         (2)将服务器Session信息存储在SQL   Server中    
        <1>首先,还是让我们来做一些准备工作。启动SQL   Server和SQL   Server代理服务。在SQL   Server中执行一个叫做InstallSqlState.sql的脚本文件。这个脚本文件将在SQL   Server中创建一个用来专门存储Session信息的数据库,及一个维护Session信息数据库的SQL   Server代理作业。我们可以在以下路径中找到那个文件:    
         
      [system   drive]\winnt\Microsoft.NET\Framework\[version]\    
        然后打开查询分析器,连接到SQL   Server服务器,打开刚才的那个文件并且执行。稍等片刻,数据库及作业就建立好了。这时,你可以打开企业管理器,看到新增了一个叫ASPState的 数据库。但是这个数据库中只是些存储过程,没有用户表。实际上Session信息是存储在了tempdb数据库的 ASPStateTempSessions表中的,另外一个ASPStateTempApplications表存储了ASP中Application对 象信息。这两个表也是刚才的那个脚本建立的。另外查看管理->SQL   Server代理->作业,发现也多了一个叫做ASPState_Job_DeleteExpiredSessions的作业,这个作业实际上就是 每分钟去ASPStateTempSessions表中删除过期的Session信息的。    
         
        <2>接着,我们返回到Web.config文件,修改mode的值改为SQLServer。注意,还要同时修改sqlConnectionString的值,格式为:    
         
      sqlConnectionString="data   source=localhost;   Integrated   Security=SSPI;"    
        其中data   source是指SQL   Server服务器的IP地址,如果SQL   Server与IIS是一台机子,写127.0.0.1就行了。Integrated   Security=SSPI的意思是使用Windows集成身份验证,这样,访问数据库将以ASP.NET的身份进行,通过如此配置,能够获得比使用 userid=sa;password=口令的SQL   Server验证方式更好的安全性。当然,如果SQL   Server运行于另一台计算机上,你可能会需要通过Active   Directory域的方式来维护两边验证的一致性。    
         
        同样,让我们做个试验。向SessionState.aspx中添加Session信息,这时发现Session信息已经存在SQL   Server中了,即使你重起计算机,刚才的Session信息也不会丢失。现在,你已经完全看见了Session信息到底是什么样子的了,而且又是存储 在SQL   Server中的,能干什么就看你的发挥了

posted on 2015-09-06 18:51  AdolphYang  阅读(282)  评论(0编辑  收藏  举报