首页  ·  知识 ·  云计算
Session持久化
wmj  http://www.cnblogs.com/wmj/archive/2008/01/29/1057  综合  编辑:dezai  图片来源:网络
情景一,Session ID在客户端的状态 情景一中,saved in cookies情况&nb

情景一,Session ID在客户端的状态
        情景一中,saved in cookies情况
        ID保存在client端的Cookies集合中
        缺点是,如果client端的cookie被禁用,那么ID无法保存
        设置cookieless="false"

mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="datasource=127.0.0.1;userid=sa;password="
cookieless="false"
timeout="20"/>

        情景一中,saved in url情况
        MS为了解决cookie被禁时,也能正常保存ID,在.net2.0中可以把ID保存在URL中.
        设置cookieless="true"

    mode="InProc"
    stateConnectionString="tcpip=127.0.0.1:42424"
    sqlConnectionString="datasource=127.0.0.1;userid=sa;password="
    cookieless="true"
    timeout="20"/>

       情景二,Session状态在服务器中的三中模式,进程内、进程外、数据库。
            情景二中,saved in 进程内
            设置mode="InProc"
            优点;保存在本机内存中,无需跨网络,访问内存速度快
            缺点;如果IIS进程发生异常或者WebSite有文件变更,都被asp.netRuntime监视,然后重新设置Session状态

                   mode="InProc"
          stateConnectionString="tcpip=127.0.0.1:42424"
            sqlConnectionString="datasource=127.0.0.1;userid=sa;password="
            cookieless="false"
            timeout="20"/>

           情景二中,saved in 进程外
           设置mode="StateServer",启动asp.net状态服务
           定位注册表
            “HKEY_LOCAL_MACHINE/SYSTEM/ControlSett001/Services/aspnet_state/Parameters“修改AllowRemoteConnection=1,Port=42424
           注意这些参数都是十进制类型,且这些设置是在访问远程asp.net状态服务的必要设置。
           优点;稳定,即使关闭WWW服务,只要启动asp.net状态服务,Session状态依然存在,不信你试试。
           如果把状态保存在非本机上只需修改上面的注册表,修改stateConnectionString="tcpip=RemoteIP:Remoteport",
           如果状态保存在远程机上的asp.net状态服务中,那么当页面关闭的时候,Session状态马上失效,
           不管你的状态保存时间设置时间有多长,一律失效,
           不信可以考试试,^-^。

            mode="StateServer"
        stateConnectionString="tcpip=127.0.0.1:42424"
        sqlConnectionString="datasource=127.0.0.1;userid=sa;password="
        cookieless="false"
        timeout="20"/>

       情景二中,saved in 数据库
       设置
       mode="SQLServer"。
       sqlConnectionString="datasource=127.0.0.1;userid=sa;password="。
       启动SqlServer和SqlServerAgent。
       定位到[systemdrive]\winnt\Microsoft.NET\Framework\[version]\。
       执行InstallSqlState.sql。
       然后我们看tempdb数据库中多了两个用户表,而且多了一个ASPstate的空库,ASPStateTempApplications和ASPStateTempApplications表中
       存储的是应用程序信息,每个应用程序在启动的时候在这里会注册一条记录,包括应用程序的ID(通过哈希算法生成的)和应用程序名称,
       实际上Session信息是存储在了tempdb数据库的ASPStateTempSessions表中,另外查看管理->SQLServer代理->作业,
       发现也多了一个叫做ASPState_Job_DeleteExpiredSessions的作业,这个作业实际上就是每分钟去ASPStateTempSessions表中删除过期的Session信息。

新建一个Asp.netWebSite,按F5,一切OK。
效果图形
两张表

ASPStateTempApplications表的数据

ASPStateTempSessions表的数据

ASPState_Job_DeleteExpiredSessions作业


需要注意的地方;

一,ASPStateTempApplications和ASPStateTempSessions表的权限用户是sa,既管理员。
二,启动MsSqlSeverAgent,用来执行清除过期Session的作业ASPState_Job_DeleteExpiredSessions。
三,如果MsSqlServer与WebSite不在同一台机器上,那么设置sqlConnectionString="datasource=RemoteIP;userid=userName;password=userpwd"

 

本文作者:wmj 来源:http://www.cnblogs.com/wmj/archive/2008/01/29/1057
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读