Session分三种:
1.InProc(进程内)-默认就是这种-速度快/但内存小/易丢失
进程外:可以在IIS或ASPNET服务意外关闭时继续保持状态,注意此时存储到session中的对象必须支持序列化:
2.StateServer:使用aspnet_state.exe
2.1修改配置文件:
2.2<sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424"/>
设置是否允许远程使用,位置:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters
2.3默认端口号:42424
2.4开启服务:我的电脑-管理-服务与应用程序-服务-ASP.NET State Service(ASP.NET 状态服务)
3.SQLServer
3.1新建ASPSTATE数据库使用运行Session数据库脚本:
临时储存区:InstallSqlState.sql & UninstallSqlState.sql
永久储存区:InstallPersistSqlState.sql & UninstallPersistSqlState.sql(需要使用SQLServerAgent服务-因为调度作业)
注意:之后配置数据库权限麻烦的话,可以在运行完aspnet_regsql.exe后在数据库中执行你想要使用的sql脚本,就可以不配置权限了。

aspnet_regsql.exe -S 127.0.0.1 -U sa -P woshinibaba -ssadd -sstype c -d test
<!--配置Session存储的位置
InProc 模式,此模式将会话状态存储在 Web 服务器上的内存中。 这是默认值。
StateServer 模式,此模式将会话状态存储在一个名为 ASP.NET 状态服务的单独进程中。 这确保了在重新启动 Web 应用程序时会保留会话状态,并让会话状态可用于网络场中的多个 Web 服务器。
SQLServer 模式将会话状态存储到一个 SQL Server 数据库中。 这确保了在重新启动 Web 应用程序时会保留会话状态,并让会话状态可用于网络场中的多个 Web 服务器。
Custom 模式,此模式允许您指定自定义存储提供程序。
Off 模式,此模式禁用会话状态。
-->
<sessionState mode="InProc">
</sessionState>

Session丢失情况:
1、存放 Session 的电脑重启
2、InProc 模式:aspnet_wp.exe 或 w3wp.exe 在“任务管理器”中或其它情况下导致其进程被终止运行。
3、InProc 模式:修改 .cs 文件后,编译了两次(只编译一次,有时不会丢失)
4、InProc 模式:修改了 Web.config
5、InProc 模式,Windows 2003 环境:应用程序池回收、停止后重启
6、InProc 模式:服务器上 bin 目录里的 .dll 文件被更新

配置Session存储在StateServer中
StateServer 注意:存储在Session中的对象必须可序列化。
1.开始 ASP.NET 状态服务:cmd里面命令:services.msc【ASP.NET State Service】
2.配置webconfig
<!--<sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424">
</sessionState>-->
3.如果是远程的stateserver配置注册表,启动对应服务器的“允许远程连接功能”
命令:cmd → regedit.exe HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection设置成1.【1表示其他计算机也能访问当前状态服务,0表示不允许。】
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\Port,设置端口。
存储在Session中的对象必须是可序列化的(二进制序列化)

Session存储在SQLServer中
//执行下面代码,自动创建数据库
aspnet_regsql.exe -S steve-pc -U sa -P 1234 -ssadd -sstype c -d SessionTestDb
//aspnet_regsql.exe -S steve-pc -E -ssadd -sstype c -d SessionTestDb
1. <sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnectionString="Data Source=steve-pc;Initial Catalog=SessionTestDb;User ID=sa;Password=1234"></sessionState>
2.对象必须可序列化
Session有什么重大BUG,微软提出了什么方法加以解决?(常考)
iis中由于有进程回收机制,系统繁忙的话Session会丢失,IIS重启也会造成Session丢失。这样用户就要重新登录或者重新添加购物车、验证码等放到Session中的信息。可以用State server或SQL Server数据库的方式存储Session不过这种方式比较慢,而且无法捕获Session的END事件。但是(一定要写上,这样才够拽)我认为这不是Bug,只能说是In-Proc方式存储Session的缺陷,缺陷是和Bug不一样的,In-Proc方式存储Session会由服务器来决定什么时候释放Session,这是By Design,In-Proc方式不满足要求的话完全可以用StateServer和数据库的方式。

StateServer还可以解决集群Session共享的问题。

配置StateServer的方法:
http://support.microsoft.com/kb/317604
http://blog.csdn.net/zj1103/archive/2008/09/14/2926773.aspx

Session的其它存储方式

-》三种存储方式:
InProc:进程内,默认是这种方式
State Service:在asp.net中进行会话存储的一种方式,需要开启State Server
SqlServer:进行数据库持久化存储
-》要求:对象可序列化
-》配置:参考配置文档
-》一致性哈希算法
数据结构(队列、栈、堆)

027-Session状态提供程序的更多相关文章

  1. Azure Redis Cache作为ASP.NET Session状态提供程序

    从上一篇博客<使用Azure Redis Cache>我们已经可以创建并使用Redis Cache为我们服务了. 作为Web开发者,我们都知道Session状态默认是保存在内存中的,它的优 ...

  2. Azure Redis Cache作为ASP.NET 缓存输出提供程序

    前一篇文章<Azure Redis Cache作为ASP.NET Session状态提供程序 >我们已经知道如何将ASP.NET应用程序Session存储在Redis Cache中,这里我 ...

  3. “数据提供程序或其他服务返回 E_FAIL 状态”

    “数据提供程序或其他服务返回 E_FAIL 状态” 的问题 ADO 连接SQL SERVER

  4. Asp.net 提供程序模型

    需要说明一下几点 1.什么是提供程序? 2.ASP.NET 4.5 中的提供程序 3.配置提供程序 有一下几种存储状态的方式 1.应用程序状态 2.会话状态 3.高速缓存状态 4.cookie 5.查 ...

  5. Web APi 2.0优点和特点?在Web APi中如何启动Session状态?

    前言 曾几何时,微软基于Web服务技术给出最流行的基于XML且以扩展名为.asmx结尾的Web Service,此服务在.NET Framework中风靡一时同时也被.NET业界同仁所青睐,几年后在此 ...

  6. .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)

    阅读目录: 1.需求背景介绍(Model元数据设置项应该与View绑定而非ViewModel) 1.1.确定问题域范围(可以使用DSL管理问题域前提是锁定领域模型) 2.迁移ViewModel设置到外 ...

  7. 可灵活扩展的自定义Session状态存储驱动

    Session是互联网应用中非常重要的玩意儿,对于超过单台部署的站点集群,都会存在会话共享的需求.在web.config中,微软提供了sessionstate节点来定义不同的Session状态存储方式 ...

  8. ASP.NET Core 使用外部登陆提供程序登陆的流程,以及身份认证的流程 (转载)

    阅读目录 在Asp.Net Core 中使用外部登陆(google.微博...) 中间件管道 The Authentication Middleware The Challenge 与认证中间件进行交 ...

  9. 链接服务器XXX的OLE DB提供程序“SQLNCLI”无法启动分布式事务“

    错误消息msg 7391 16级状态1行1表示 “Msg 7391,Level 16,State 2,Line 1 无法执行该操作,因为链接服务器XXX的OLE DB提供程序“SQLNCLI”无法启动 ...

随机推荐

  1. SQLSERVER性能调优小技巧

    平时做个记录,在工作过程中针对大数据查询的一些小技巧 -----------SELECT------------- 1.必要的冗余字段,减少关联查询 2.关键查询字段必须加索引 否则百万级以上你就别想 ...

  2. Java源码阅读的真实体会(一种学习思路)

    Java源码阅读的真实体会(一种学习思路) 刚才在论坛不经意间,看到有关源码阅读的帖子.回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动. 源码阅读,我觉得最核心有三点:技术基础+强烈 ...

  3. c# async和await 用法(阻塞与不阻塞)

    void PagePaint() { Console.WriteLine("Paint Start"); Paint(); Console.WriteLine("Pain ...

  4. windows下IDEA的terminal配置bash命令

    使用git-bash.exe会单独打开一个窗口,而我们希望是在终端内置的命令行.这里我使用bash.exe 在IDEA中,打开settings,设置相应的bash路径 settings–>Too ...

  5. mac下安装mysql5.7.18,连接出现Access denied for user 'root'@'localhost' (using password: YES)

    mac下,mysql5.7.18连接出错,错误信息为:Access denied for user 'root'@'localhost' (using password: YES) ()里面的为she ...

  6. WinForm中一个窗体调用另一个窗体

    [转] WinForm中一个窗体调用另一个窗体的控件和事件的方法(附带源码) //如果想打开一个 Form2 的窗体类,只需要: Form2 form = new Form2(); //有没有参数得看 ...

  7. 群晖搭建webssh

    拷贝工程到系统根,然后需要赋予权限 sudo chmod 777 -R WebSSH2/ git clone https://github.com/zhaocundang/WebSSH2.git de ...

  8. BAT面试上机题从3亿个ip中找出访问次数最多的IP详解

    我们面临的问题有以下两点:1)数据量太大,无法在短时间内解决:2)内存不够,没办法装下那么多的数据.而对应的办法其实也就是分成1)针对时间,合适的算法+合适的数据结构来提高处理效率:2)针对空间,就是 ...

  9. Oracle 使用Dblink

    DBLINK数据库链接是一个数据库中的模式对象,使您可以访问另一个数据库上的对象. dblink限定符允许您引用除本地数据库以外的数据库中的对象,如果省略了dblink,那么Oracle假定您指的是本 ...

  10. git push fatal: The remote end hung up unexpectedly

    git push fatal: The remote end hung up unexpectedly git config http.postBuffer git gc --aggressive 不 ...