027-Session状态提供程序
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状态提供程序的更多相关文章
- Azure Redis Cache作为ASP.NET Session状态提供程序
从上一篇博客<使用Azure Redis Cache>我们已经可以创建并使用Redis Cache为我们服务了. 作为Web开发者,我们都知道Session状态默认是保存在内存中的,它的优 ...
- Azure Redis Cache作为ASP.NET 缓存输出提供程序
前一篇文章<Azure Redis Cache作为ASP.NET Session状态提供程序 >我们已经知道如何将ASP.NET应用程序Session存储在Redis Cache中,这里我 ...
- “数据提供程序或其他服务返回 E_FAIL 状态”
“数据提供程序或其他服务返回 E_FAIL 状态” 的问题 ADO 连接SQL SERVER
- Asp.net 提供程序模型
需要说明一下几点 1.什么是提供程序? 2.ASP.NET 4.5 中的提供程序 3.配置提供程序 有一下几种存储状态的方式 1.应用程序状态 2.会话状态 3.高速缓存状态 4.cookie 5.查 ...
- Web APi 2.0优点和特点?在Web APi中如何启动Session状态?
前言 曾几何时,微软基于Web服务技术给出最流行的基于XML且以扩展名为.asmx结尾的Web Service,此服务在.NET Framework中风靡一时同时也被.NET业界同仁所青睐,几年后在此 ...
- .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)
阅读目录: 1.需求背景介绍(Model元数据设置项应该与View绑定而非ViewModel) 1.1.确定问题域范围(可以使用DSL管理问题域前提是锁定领域模型) 2.迁移ViewModel设置到外 ...
- 可灵活扩展的自定义Session状态存储驱动
Session是互联网应用中非常重要的玩意儿,对于超过单台部署的站点集群,都会存在会话共享的需求.在web.config中,微软提供了sessionstate节点来定义不同的Session状态存储方式 ...
- ASP.NET Core 使用外部登陆提供程序登陆的流程,以及身份认证的流程 (转载)
阅读目录 在Asp.Net Core 中使用外部登陆(google.微博...) 中间件管道 The Authentication Middleware The Challenge 与认证中间件进行交 ...
- 链接服务器XXX的OLE DB提供程序“SQLNCLI”无法启动分布式事务“
错误消息msg 7391 16级状态1行1表示 “Msg 7391,Level 16,State 2,Line 1 无法执行该操作,因为链接服务器XXX的OLE DB提供程序“SQLNCLI”无法启动 ...
随机推荐
- 利用final定义方法:这样的方法为一个不可覆盖的方法。
常量(这里的常量指的是实例常量:即成员变量)赋值: ①在初始化的时候通过显式声明赋值.Final int x=3: ②在构造的时候赋值. 局部变量可以随时赋值. 利用final定义方法:这样的 ...
- 承上 DBlink 与 SCN | 新增视图找出外部 SCN 跳变
综述 SQL> set pages 100 lines 200 col result for a15 col OPERATION_TIMESTAMP for a35 col HOST_N ...
- [原创]电路仿真设计multisim 14安装,破解,汉化教程
硬件工程师开发产品.利用multisim 等辅助软件进行设计仿真可以有效提高开发效率,减少设计弯路. 本文博乐就带大家一起进行multisim 14安装破解汉化. 首先下载multisim 14安装文 ...
- Http url MVC Request Query Form 传参专贴
一.工具区 [参考]postman中 form-data.x-www-form-urlencoded.raw.binary的区别--转 二..net MVC 三..net WebForm 四.Java ...
- 认识 SSH 密钥对
SSH 密钥对是阿里云为您提供的新的远程登录 ECS 实例的认证方式. 相较于传统的用户名和密码认证方式,SSH 密钥对有以下特点: 仅适用于 Linux 实例: SSH 密钥对登录认证更为安全可靠: ...
- springmvc 返回 404 解决
Idea Maven springmvc spring 项目搭建中/url 可以访问controller,并且能返回正确的ModelAndView,但是页面总是显示404 项目结构: web.xml ...
- mysql关联表修改语句
UPDATE tb_irms_trans_pip2optseg a,`tb_irms_trans_pip` b SET a.district=b.district WHERE a.prop_id=b. ...
- Spring 学习笔记(十)渲染 Web 视图 (Apache Tilesa 和 Thymeleaf)
使用Apache Tiles视图定义布局 为了在Spring中使用Tiles,需要配置几个bean.我们需要一个TilesConfigurer bean,它会负责定位和加载Tile定义并协调生成Til ...
- Android学习:Notification状态栏通知
Notification是显示在手机状态栏的通知,它代表一种具有全局效果的通知,程序一般通过NotificationManager服务来发送Notification.在小米手机上,手指在屏幕顶端向下划 ...
- 为IONIC开发的安卓apk签名
首先进入\platforms\android目录生成一个keystore文件: keytool -genkey -alias mykey -keyalg RSA -validity 40000 -ke ...