博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET中Session的sessionState 4种mode模式
阅读量:7281 次
发布时间:2019-06-30

本文共 2176 字,大约阅读时间需要 7 分钟。

1. sessionState的4种mode模式

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

2. Off模式

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

  单个页面关闭Session:

<%@ Page EnableSessionState="false" %>

3. InProc模式(缺省模式)

  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数据将丢失。

  以上设置的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 '1'

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

  3>. 设置sessionState

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

转载于:https://www.cnblogs.com/libingql/p/4675752.html

你可能感兴趣的文章
GraphQL 学习
查看>>
3分钟带你看懂android中的Binder机制
查看>>
说说vue-cli中使用flexible和px2rem-loader
查看>>
浅析 Vue 2.6 中的 nextTick 方法
查看>>
JavaScript链式调用实例
查看>>
webpack构建和性能优化探索
查看>>
区块链 | ETH投票项目
查看>>
simhash+汉明距离计算文本相似度
查看>>
mocha
查看>>
Node.js和NoSQL开发比特币加密货币应用程序(下)
查看>>
[LeetCode] 348. Design Tic-Tac-Toe
查看>>
移动端的适配及布局
查看>>
跨域访问
查看>>
aotoo-hub,一体式大前端架构
查看>>
Ubuntu创建新用户的正确姿势
查看>>
Webpack 4 教程 - 4. 使用SplitChunksPlugin插件进行代码分割
查看>>
项目经验不丰富、技术不突出的程序员怎么打动面试官?
查看>>
如何跨操作系统共享文件?你还在用U盘傻瓜式地拷贝文件吗?
查看>>
使用Jest测试JavaScript(Mock篇)
查看>>
J2EE 核心模式
查看>>