1. sessionState的4种mode模式

  在ASP.NET中Session的sessionState的4中mode模式:Off、InProc、StateServer及SqlServer。

2. Off模式

<sessionState mode="Off"></sessionState>

  关闭模式,即不需要使用Session。

  单个页面关闭Session:

<%@ Page EnableSessionState="false" %>

3. InProc模式(缺省模式)

<sessionState mode="InProc" cookieless="false" timeout="20"></sessionState>

  mode设置为"InProc"时,Session直接存储在IIS进程中。

  优点:获取session状态的速度快

  缺点:易丢失

  mode为InProc可能造成Session丢失的情况:

  1>. ASP.NET进程(aspnet_wp.exe)、IIS进程(w3wp.exe)默认的20分钟重启应用程序;

  2>. 缓冲池填满后重启;

  3>. 进程保护措施重启。

4. StateServer模式

  mode设置为"StateServer"时,Session 存储在单独的内存缓冲区中,再由单独一台服务器上运行的ASP.NET State Service(aspnet_state.exe)来控制这个缓冲区。

  优点:session状态单独存储在一个进程中,不会因为iis或者应用的重启而丢失状态。

  缺点:

  1>. 由于是两个不同的进程,获取Session数据比InProc慢;

  2>. Session数据存储在内存中,重启ASP.NET State Service服务,Session数据将丢失。

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

  以上设置的ASP.NET State Service在127.0.0.1的42424端口(默认端口)上运行,要在服务器上改变端口,可编辑HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters注册表项中的Port值。(打开注册表方式:运行 regedit)

  mode设置为"StateServer"需要注意:

  1>. 启动ASP.NET State Service;

  2>. 如果stateConnectionString的值不是127.0.0.1或者localhost等代表本地地址的值,需要修改注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state \Parameters 节点 → 将 AllowRemoteConnection 的键值设置成“1”(1 为允许远程电脑的连接,0 代表禁止)→ 设置 Port (端口号)

5. SqlServer模式

  mode设置为"SqlServer"时,Session存储在SQL Server数据库中持久化保持,ASP.NET尝试将会话数据存储到由sqlConnectionString属性(其中包含数据源以及登录服务器所需的安全凭证)指定的SQL Server中。可应用场景:网络负载均衡(NLB)环境。

  设置SqlServer模式步骤:

  1>. 配置SQL erver创建ASPState数据库

  创建ASPState数据库,运行C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallSqlState.sql,可以通过SQL查询分析器来执行语句,也可以使用sqlcmd来执行。

sqlcmd -S [server name] -U [user] -P [password] -i C:\Windows\Microsoft.NET\Framework\v4.0.30319\InstallSqlState.sql

  此时SQLServer会创建数据库ASPState,但是没有表。

  若创建ASPState数据库后要删除,可以运行C:\Windows\Microsoft.NET\Framework\v4.0.30319\UninstallSqlState.sql,但要先停止w3svc进程。

net stop w3svc

  2>. ASPState创建表

aspnet_regsql.exe  -ssadd -sstype p -S [server name] -U [user] -P [password]

  运行cmd:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regsql.exe  -ssadd -sstype p -S (local) -U sa -P ''

  此时数据库中创建两张表:ASPStateTempApplications、ASPStateTempSessions。

  3>. 设置sessionState

<sessionState mode="SQLServer" sqlConnectionString="data source=127.0.0.1;user id=sa;password=1" cookieless="false" timeout="20"></sessionState>

  由于数据不存储在本地内存,存储Session状态的对象需要进行序列化和反序列化,以便通过网络传给数据库服务器,以及从数据库服务器传回。

ASP.NET中Session的sessionState 4种mode模式的更多相关文章

  1. ASP.Net中Session失效的一种编程思路

    在写一个客户的B/S结构应用程序时,突然发现一个技巧,不知道是否是MS的一个BUG,给相关的有研究的朋友原先考虑写一个检查Session的类,Session失效后,必须转向登陆页面,可每一个调用该类的 ...

  2. 判断asp.net中session过期的方法

    判断asp.net中session过期的方法 转载自:http://www.cnblogs.com/xilipu31/archive/2013/04/12/3016830.html 方法一:最麻烦也是 ...

  3. ASP.Net中页面传值的几种方式

    开篇概述 对于任何一个初学者来说,页面之间传值可谓是必经之路,却又是他们的难点.其实,对大部分高手来说,未必不是难点. 回想2016年面试的将近300人中,有实习生,有应届毕业生,有1-3年经验的,有 ...

  4. asp.net中session的原理及应用

    Session简介丶特性 1.Session是一种Web会话中的常用状态之一. 2.Session提供了一种把信息保存在服务器内存中的方式.他能储存任何数据类型,包含自定义对象. 3.每个客户端的Se ...

  5. ASP.NET中Session的个人浅谈

    看到博客园的一个哥们写的面试经历,想到了面试中常问到的Session,一时手痒就谈下自己对Session的理解,这东西最开始在用户登录登出的时候用到过,后来一直没怎么用过,里面还是有很多知识点值得注意 ...

  6. asp.net中挺高性能的24种方法

    那性能问题到底该如何解决?以下是应用系统发布前,作为 .NET 开发人员需要检查的点. 1.debug=「false」 当创建 ASP.NET Web应用程序,默认设置为「true」.开发过程中,设置 ...

  7. ASP.NET中处理异常的几种方式

    1.程序中使用try catch 对于预知会发生异常的代码段使用try catch主动捕获异常,适用于提示给用户或跳转到错误页面,或者通过其它方式处理异常(日志.通知等). int i = 10; i ...

  8. 关于 tomcat 集群中 session 共享的三种方法

    前两种均需要使用 memcached 或redis 存储 session ,最后一种使用 terracotta 服务器共享. 建议使用 redis,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单 ...

  9. 关于javascript中this 指向的4种调用模式

    this指向问题绝对可以排js 的top 5最难和最重点的问题,初学者常常搞不清楚this指向哪里,特别是学过java和c#的人,想当年俺也迷糊了好久,直到遇到蝴蝶书,主要是因为js和主流的面向对象语 ...

随机推荐

  1. alias导致virtualenv异常的分析和解法

    title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...

  2. C++对C的函数拓展

    一,内联函数 1.内联函数的概念 C++中的const常量可以用来代替宏常数的定义,例如:用const int a = 10来替换# define a 10.那么C++中是否有什么解决方案来替代宏代码 ...

  3. .NET Core全新路线图

    .NET Core / ASP.NET Core 1 RTM发布两周后,社区也很积极,收到了非常多的反馈,上周五微软的scott Hunter 在dotnet团队官方博客上发布了.NET Core全新 ...

  4. Java基础Map接口+Collections

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  5. Enterprise Solution 3.1 企业应用开发框架 .NET ERP/CRM/MIS 开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    行业:基于数据库的制造行业管理软件,包含ERP.MRP.CRM.MIS.MES等企业管理软件 数据库平台:SQL Server 2005或以上 系统架构:C/S 开发技术 序号 领域 技术 1 数据库 ...

  6. .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来

    从该系列的第一篇文章 .NET平台开源项目速览(1)SharpConfig配置文件读写组件 开始,不知不觉已经到第17篇了.每一次我们都是介绍一个小巧甚至微不足道的.NET平台的开源软件,或者学习,或 ...

  7. [C#] 简单的 Helper 封装 -- CookieHelper

    using System; using System.Web; namespace ConsoleApplication5 { /// <summary> /// Cookie 助手 // ...

  8. iOS逆向工程之Reveal工具的安装、配置与使用

    今天博客内容比较简单,不过还是蛮重要的.经常有小伙伴在QQ上私下问我,说博客中是如何使用Reveal查看AppStore中下载应用的UI层级的,那么就在今天这篇博客中作为一个主题来统一的介绍一下吧.虽 ...

  9. Android开发学习—— 创建项目时,不是继承activity,而是继承ActionBarActivity

    对于我们新建android项目时, 会 继承ActionBarActivity. 我们在新建项目时, 最小需求的sdk 选择 4.0以上版本.这样 新建的android项目就是继承activity了!

  10. SQL-union

    集合运算符是对两个集合操作的,两个集合必须具有相同的列数,列具有相同的数据类型(至少能隐式转换的),最终输出的集合的列名由第一个集合的列名来确定.(可以用来连接多个结果)联合(union)与连接(jo ...