Session持久化

   关于Session 持久化这方面的话题,有很多人已经写过了,但是,毕竟这是我的项目经验,更加真实,可用。     进入主题。
情景一,Session ID 在客户端的状态         情景一中,saved in cookies 情况          ID保存在client端的Cookies集合中         缺点是,如果client端的cookie被禁用,那么ID无法保存         设置cookieless="false"
< sessionState 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"
<sessionState      mode="InProc"      stateConnectionString="tcpip=127.0.0.1:42424"      sqlConnectionString="datasource=127.0.0.1;userid=sa;password="      cookielesstimeout="20"/> = "true"     
       情景二,Session状态在服务器中的三中模式,进程内、进程外、数据库。              情景二中,saved in 进程内              设置mode="InProc"              优点;保存在本机内存中,无需跨网络,访问内存速度快              缺点;如果IIS进程发生异常或者WebSite有文件变更,都被asp.netRuntime监视,然后重新设置Session状态
       <sessionState              modestateConnectionString="tcpip=127.0.0.1:42424"             sqlConnectionString="datasource=127.0.0.1;userid=sa;password="             cookieless="false"             timeout="20"/> = "InProc"           
           情景二中,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状态马上失效,            不管你的状态保存时间设置时间有多长,一律失效,            不信可以考试试,^-^。
     <sessionState          mode="StateServer"          stateConnectionStringsqlConnectionString="datasource=127.0.0.1;userid=sa;password="         cookieless="false"         timeout="20"/> = "tcpip=127.0.0.1:42424"         
       情景二中,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的空库, ASPStateTempApplicationsASPStateTempApplications表中        存储的是应用程序信息,每个应用程序在启动的时候在这里会注册一条记录,包括应用程序的ID(通过哈希算法生成的)和应用程序名称,        实际上Session信息是存储在了tempdb数据库的ASPStateTempSessions表中,另外查看管理->SQLServer代理->作业,        发现也多了一个叫做ASPState_Job_DeleteExpiredSessions的作业,这个作业实际上就是每分钟去ASPStateTempSessions表中删除过期的Session信息。 新建一个Asp.netWebSite,按F5,一切OK。 效果图形   两张表   ASPStateTempApplications表的数据 ASPStateTempSessions表的数据 ASPState_Job_DeleteExpiredSessions作业 需要注意的地方;
一,ASPStateTempApplicationsASPStateTempSessions表的权限用户是sa,既管理员。 二,启动MsSqlSeverAgent 用来执行清除过期Session的作业ASPState_Job_DeleteExpiredSessions 三,如果MsSqlServerWebSite不在同一台机器上,那么设置 sqlConnectionString="datasource=RemoteIP;userid=userName;password=userpwd"
结束     写得不妥之处,请多多指教!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值