Session容易丢失的一些常见解决办法

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 在以前的项目中经常遇到Session容易丢失的问题,郁闷,经过网上搜索,还是有解决方法的。    默认配置情况下,Web.Config文件中关于Session的设定如下:         我们会发现sessionState标签中有个属性mode,它可以有3种取值:InProc、StateServer,SQLServer(注意大小写) 。
在以前的项目中经常遇到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丢失已经是一种习以为常的问题了,在自己知道如何解决这一问题后,我也不吝啬共享出给大家知道。

     解决session丢失的问题有两种方法:
     1)将session保存在一台sate server中。
     2)将session保存在sql server中。这种方法使用的比较少,所以选择了第一种方法。

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

    <sessionState mode="StateServer" cookieless="false" timeout="240"   stateCtateNetworkTimeout="14400" />

     再在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技术乐园

示例

以下示例指定若干会话状态配置设置。

<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"

/>

+ 注:只适用于支持asp.net的用户。


相关文章
|
移动开发 缓存 JavaScript
2021最新阿里代码规范(前端篇)
2021最新阿里代码规范(前端篇)
56810 11
2021最新阿里代码规范(前端篇)
|
编译器 C语言
成功解决“函数用于调用的参数太少/太多”问题
成功解决“函数用于调用的参数太少/太多”问题
482 0
|
Go 开发者
错误处理不再难!Go语言错误处理完全指南
错误处理不再难!Go语言错误处理完全指南
465 0
|
8月前
|
人工智能 JavaScript Java
从零开始教你打造一个MCP客户端
Anthropic开源了一套MCP协议,它为连接AI系统与数据源提供了一个通用的、开放的标准,用单一协议取代了碎片化的集成方式。本文教你从零打造一个MCP客户端。
6300 5
|
机器学习/深度学习 搜索推荐 测试技术
【王喆-推荐系统】评估篇-(task2)推荐模型评估指标
准确率 (Accuracy) 是指分类正确的样本占总样本个数的比例。
1990 0
【王喆-推荐系统】评估篇-(task2)推荐模型评估指标
|
8月前
|
数据安全/隐私保护 开发者 Python
使用 yt-dlp 二次开发, 快速下载 YouTube等平台高清视频工具开发
想从多个平台下载高清无水印视频?本文教你使用 `yt-dlp` 工具轻松实现!支持 YouTube、B站、抖音等主流平台,提供代码示例与解析,涵盖批量下载、字幕提取、音频分离等高级功能。无论你是开发者还是普通用户,都能快速上手,高效获取所需视频资源。
1645 0
|
安全 Java 数据库
Java新秀登场:深入了解Record类型
Java新秀登场:深入了解Record类型
2364 0
|
JavaScript 前端开发 Python
优化代码示例排版的方法与技巧
【10月更文挑战第17天】在实际的文档编写过程中,要不断地总结经验,根据具体情况灵活运用这些方法,以达到最佳的排版效果。同时,也要关注读者的反馈,根据他们的建议和需求进行改进,使文档更加贴合读者的需求和期望。只有这样,才能真正为读者提供有价值的信息和良好的阅读体验。
355 3
|
机器学习/深度学习 人工智能 自然语言处理
Transformer图解以及相关的概念解析
前言 transformer是目前NLP甚至是整个深度学习领域不能不提到的框架,同时大部分LLM也是使用其进行训练生成模型,所以transformer几乎是目前每一个机器人开发者或者人工智能开发者不能越过的一个框架。接下来本文将从顶层往下去一步步掀开transformer的面纱。 transformer概述 Transformer模型来自论文Attention Is All You Need。 在论文中最初是为了提高机器翻译的效率,它使用了Self-Attention机制和Position Encoding去替代RNN。后来大家发现Self-Attention的效果很好,并且在其它的地
489 9
|
安全 Linux 网络安全
在Linux中,使用rsync同步数据时,假如采用的是ssh方式,并且目标机器的sshd端端并不是默认的22端口,该如何做?
在Linux中,使用rsync同步数据时,假如采用的是ssh方式,并且目标机器的sshd端端并不是默认的22端口,该如何做?

热门文章

最新文章