.net session丢失问题

默认配置情况下,Web.Config文件中关于Session的设定如下:

<sessionState mode='InProc' stateConnectionString='tcpip=127.0.0.1:42424' sqlConnectionString='data source=127.0.0.1;

Trusted_Connection=yes' cookieless='true' timeout='60'/>

我们会发现sessionState标签中有个属性mode,它可以有3种取值:InProc、StateServer,SQLServer(大小写敏感) 。

默认情况下是InProc,也就是将Session保存在进程内(IIS5是aspnet_wp.exe,而IIS6是W3wp.exe),这个进程不稳定,

在某些事件发生时,进程会重起,所以造成了存储在该进程内的Session丢失。

解决办法:不用要InProc模式,而采用StateServer模式,同时将服务中的"ASP.NET 状态服务"设置为自动启用,这样的话,

session就不依赖于某一进程了

<sessionState mode="StateServer" cookieless="false" timeout="20000" />

Session丢失已经是一种习以为常的问题了,在自己也了解一些如何解决的问题,但是也一直没有机会去用,现在由于新的项目要在B/S下开发,所以不得不让我考虑Session的问题

解决session丢失的问题有两种方法:1)将session保存在一台sate server中2)将session保存在sql server中我们使用的数据库是oracle,不想再装一个数据库,所以用了第一种方法

首先根据网上查的资料对webconfig文件中session部分进行修改如下:

<sessionState

mode="StateServer"

cookieless="false"

timeout="240"

stateC

stateNetworkTimeout="14400"

/>

<machineKey

validati

decrypti

validation="SHA1"

/>

然后再在10.164.222.122 这台电脑上的asp.net state server 服务启动

这样基本上就行了体验一下

我用了一个测试程序,在3个小时以后session仍然可用,更绝的是我的电脑都重起了,在其它电脑上打开的网页中session仍然可用一番体验以后,感觉还真不错

.NET Framework 常规参考

<sessionState> 元素

为当前应用程序配置会话状态设置

<configuration>

<system.web>

<sessionState>

<sessionState mode="Off|InProc|StateServer|SQLServer"

cookieless="true|false"

timeout="number of minutes"

stateC

sqlC

stateNetworkTimeout="number of seconds"/>

必选属性

属性 选项 说明

mode 指定在哪里存储会话状态

Off 指示会话状态未启用

InProc 指示在本地存储会话状态

StateServer 指示在远程计算机上存储会话状态

SQLServer 指示在 SQL Server 上存储会话状态

可选属性

属性 选项 说明

cookieless 指定不具有 Cookie 的会话是否应用于标识客户端会话

true 指示应使用不具有 Cookie 的会话

false 指示不应使用没有 Cookie 的会话默认值为 false

timeout 指定在放弃一个会话前该会话可以处于空闲状态的分钟数默认值为 20

stateConnectionString 指定远程存储会话状态的服务器名称和端口例如“tcpip=127.0.0.1:42424”当 mode 为 StateServer 时该属性是必需的

sqlConnectionString 为 SQL Server 指定连接字符串飞飞Asp技术.乐园例如“data source=localhost;Integrated Security=SSPI;Initial Catalog=northwind”当 mode 为 SQLServer 时该属性是必需的

stateNetworkTimeout 在使用 StateServer 模式存储会话状态时,指定在放弃会话之前 Web 服务器和状态服务器之间的 TCP/IP 网络连接空闲的时间(以秒为单位)默认值为 10

备注

使用 StateServer 模式

确保运行 ASP.NET 状态服务的服务器是要存储会话状态信息的远程服务器该服务与 ASP.NET 一起安装,其默认位置为 <驱动器>:\systemroot\Microsoft.NET\Framework\version\aspnet_state.exe

在应用程序的 Web.config 文件中,设置 mode=StateServer 并设置 stateConnectionString 属性例如,stateC

使用 SQLServer 模式

在运行 SQL Server 的计算机(它将存储会话状态)上运行 InstallSqlState.sql(默认的安装位置为 <驱动器>:\systemroot\Microsoft.NET\Framework\version)这将创建一个名为 ASPState 的数据库,该数据库具有新的存储过程并且在 TempDB 数据库中具有 ASPStateTempApplications 表和 ASPStateTempSessions 表

在应用程序的 Web.config 文件中,设置 mode=SQLServer 并设置 sqlConnectionString 属性例如,sqlC飞飞!Asp技术乐园

示例

以下示例指定若干会话状态配置设置飞飞As.p技术乐园

<configuration>

<system.web>

<sessionState mode="InProc"

cookieless="true"

timeout="20"/>

</sessionState>

</system.web>

</configuration>

要求

包含于:<system.web>

Web 平台:IIS 5.0、IIS 5.1、IIS 6.0

配置文件:Machine.config、Web.config

配置节处理程序:System.Web.SessionState.SessionStateSectionHandler

请参见

ASP.NET 配置 | ASP.NET 设置架构 | SessionStateModule

在Windows2003的服务器中的IIS6加入了应用程序池来回收一些无用的进程的功能,当由于网站程序的错误或访问量太多的导致的应用程序池会自动回收该进程,防止网站进入“死机”状态,而这时候的应用程序池的回收就会导致session变量被清除,就出现了session变量不见的现象

为了解决这种在Windows2003下才出现的问题,我们在服务端起动ASP.NET State Service服务,并且在系统的machine.config做了一些改动现在默认的情况下会话状态mode是StateServer如果您的网站根目录下也配有一个web.config配置文件,请把mode="InProc"改成mode="StateServer",如下代码,就可以防止session变量的丢失:

<sessionState

mode="StateServer"

stateC

sqlC

cookieless="false"

timeout="30"

/>

转载于:https://www.cnblogs.com/caicainiao/archive/2010/01/22/1654045.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值