简直莫名其妙,非常困惑,毫无办法。页面居然没有规律的出错!

monkey_zeng 2003-03-13 09:16:50
开发了一个系统,我将用户信息存放在Session中,在每个页面都有判断用户Session是否过期或存在,如果Session不存在,就跳到登陆页面重新登陆。

系统在小型局域网内访问量较少的情况下,没有任何异常!

但是当到了大型网络,访问量较多的时候,在客户端的某一台机上就会不确定的出现某个页面无法显示或出错。这个时候,在其它客户端正在使用该系统的所有用户的Session似乎都被清空,全部都跳到登陆页面!

这样的情况在一天内出现20多次,出错的页面不确定。

各位兄弟姐妹,大家多多出点意见!谢谢!
...全文
62 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
GOALSTAR 2003-03-13
  • 打赏
  • 举报
回复
问题地在正确答案如果搞定,请贴上来
cnuninet 2003-03-13
  • 打赏
  • 举报
回复
好像.net 早期版本中存在session自动消失的bug,你打了最新的补丁了吗?
monkey_zeng 2003-03-13
  • 打赏
  • 举报
回复
谢谢大家捧场,午饭后来结贴,
baitianhai 2003-03-13
  • 打赏
  • 举报
回复
如果你机器多的话,还可以用其它的机器作StateServer,专门来做( session server)这样就可以不用放在数据库中了
timmy3310 2003-03-13
  • 打赏
  • 举报
回复
修改Web.Config

<sessionState
mode="InProc" //改为SQLServer
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;user id=sa;password=" //设置连接字符串
cookieless="false"
timeout="20"
/>
monkey_zeng 2003-03-13
  • 打赏
  • 举报
回复
同志们,好象用baitianhai(hong)的方法是比较保险的做法!!!

但是在速度上可能会比较慢一点,毕竟是要读数据库的操作!!!

谢谢!!
谢谢大家!!
谢谢,谢谢!!!!!!
saucer 2003-03-13
  • 打赏
  • 举报
回复
without seeing the app and configurations and behavior, I have no idea, but see

PRB: Random Application Restarts with "Application Is Restarting" Error in ASP.NET
http://support.microsoft.com/?scid=kb;en-us;Q312592


also make sure your code is not modifying web.config, global.asax and anything in the bin subdirectory


baitianhai 2003-03-13
  • 打赏
  • 举报
回复
使用 StateServer 模式

确保 ASP.NET 状态服务正在将存储会话状态信息的远程服务器上运行。该服务是随 ASP.NET Premium 版一起安装的,并且该服务默认情况下位于 <Drive>:\Program Files\ASP.NET\Premium\version\aspnet_estate.exe。
在应用程序的 Web.config 文件中,设置 mode=StateServer 并设置 stateConnectionString 属性;例如 stateConnectionString="tcpip=sarath:42424"。
使用 SQLServer 模式

在具有将存储会话状态的 SQL Server 的计算机上运行 InstallSqlState.sql(默认情况下安装在 <Drive>:\WINNT\Microsoft.NET\Framework\v1.0.2914 中)。这将创建一个名为 ASPState 的数据库,该数据库具有新的存储过程并且在 TempDB 数据库中具有 ASPStateTempApplications 表和 ASPStateTempSessions 表。
在应用程序的 Web.config 文件中,设置 mode=SQLServer 并设置 sqlConnectionString 属性。例如,sqlConnectionString="data source=sarath;user id=sa;password=MyPassword"。
imports 2003-03-13
  • 打赏
  • 举报
回复
UP一下!
baitianhai 2003-03-13
  • 打赏
  • 举报
回复
在Microsoft Visual Studio .NET目录下搜索 SessionServices.sql 这个文件
baitianhai 2003-03-13
  • 打赏
  • 举报
回复
sqlserver支持需要建立一个新的数据库(.net中可以找到它的脚本),不过具体的我没有记住,你可以查阅资料
baitianhai 2003-03-13
  • 打赏
  • 举报
回复
<sessionState mode="InProc" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;user id=sa;password=" cookieless="false" timeout="600"/>
在web.config的设置中,有这样一条
其中 mode可以设置为以下的状态

InProc 会话状态与 ASP.NET 辅助进程一起执行。默认值为 InProc。
Off 会话状态被禁用。
SQLServer 会话状态正在使用进程外 SQL Server 存储状态信息。
StateServer 会话状态正在使用进程外 Windows NT Server 存储状态信息。
你可以选择 使用SQLServer或者是 用 2000Server来存储 session
不用asp.net辅助进程
dreammaster 2003-03-13
  • 打赏
  • 举报
回复
同意 timmy3310

内存耗用太大,既使将MemeryLimit设为100%可以满足,但是系统运行速度较慢.
timmy3310 2003-03-13
  • 打赏
  • 举报
回复
我觉得根本的解决方法还是要从优化你的程序入手,尽可能的减少开销
monkey_zeng 2003-03-13
  • 打赏
  • 举报
回复
继续跟贴呀!!!

难得来问个问题,倾囊而尽也无所谓啦!!
timmy3310 2003-03-13
  • 打赏
  • 举报
回复
请参考:
ms-help://MS.VSCC/MS.MSDNVS.2052/cpgenref/html/gngrfprocessmodelsection.htm
timmy3310 2003-03-13
  • 打赏
  • 举报
回复
clientConnectedCheck 指定 ASP.NET 在执行客户端连接检查前在队列中保留的请求的长度。
comAuthenticationLevel 为 DCOM 安全性指定身份验证的级别。默认选项是 Connect。
Default 指定 DCOM 使用其常规安全协商算法确定身份验证级别。
None 不指定任何身份验证。
Connect 指定只有在客户端建立与服务器的关系时 DCOM 才验证客户端的凭据。
Call 指定在每一远程过程调用的开始当服务器接收请求时 DCOM 验证客户端的凭据。
Pkt 指定 DCOM 验证所接收的所有数据是否都来自预期的客户端。数据文报传输始终使用 Pkt 身份验证。
PktIntegrity 指定 DCOM 验证和确认尚未修改在客户端和服务器之间传输的任何数据。
PktPrivacy 指定 DCOM 验证所有以前的级别并加密每一远程过程调用的参数值。
comImpersonationLevel 为 COM 安全性指定身份验证级别。
Default 指定 DCOM 使用其常规安全协商算法确定模拟级别。
Anonymous 指定客户端对于服务器是匿名的。服务器可以模拟客户端,但模拟标记将不包含任何信息。在此版本中不支持 Anonymous。
Identify 指定服务器可以包含客户端的标识。服务器可为访问控制列表 (ACL) 检查模拟客户端,但不能将系统对象作为客户端访问。
Impersonate 指定服务器进程在代表客户端来执行时可以模拟客户端的安全上下文。此级别的模拟可用来访问诸如文件之类的本地资源。当在该级别模拟时,模拟标记可以只横穿一个计算机边界。
Delegate 指定服务器进程在代表客户端来执行时可以模拟客户端的安全上下文。服务器进程还可以在代表客户端时使用掩饰向其他服务器发出传出呼叫。服务器可以在其他计算机上使用该客户端的安全上下文来将本地和远程资源作为客户端访问。当在该级别模拟时,模拟标记可以只横穿任意数目的计算机边界。
cpuMask 指定在多处理器服务器上哪些处理器可以运行 ASP.NET 进程。cpuMask 值指定一个位模式,它指示可以运行 ASP.NET 线程的 CPU。例如,cpuMask 值 13 表示位模式 1101。在具有四个 CPU 的计算机上,这指示可以在 CPU 0、2 和 3 上安排 ASP.NET 进程,但不可以在 CPU 1 上安排。ASP.NET 为每一合格的 CPU 启动一个辅助进程。如果 webGarden 属性(见下文)设置为 false,则 cpuMask 将辅助进程数目限制为合格的 CPU 的数目。(允许的最大辅助进程数是 CPU 的数目。默认情况下,启用所有 CPU 并且 ASP.NET 为每一 CPU 启动一个进程。
enable 指定是否启用进程模型。
true 指示进程模型启用。
false 指示进程模型未启用。
idleTimeout 指定 ASP.NET 自动结束辅助进程后的不活动周期,采用 in hr:min:sec 字符串格式。默认为无限。
logLevel 指定将记录到事件日志的事件类型。
All 指定记录所有进程事件。
None 指定不记录任何事件。
Error 指定只记录意外关闭、内存限制关闭和死锁关闭。Errors 是默认选项。
maxWorkerThreads 5 to 100 在每个 CPU 的基础上配置用于进程的线程的最大数目。例如,如果该值在单处理器服务器上是 25,ASP.NET 则使用运行库 API 将进程限制设置为 25。在双处理器服务器上,该限制设置为 50。默认为 25。
maxIoThreads 5 to 100 在每个 CPU 的基础上配置用于进程的辅助线程的最大数目。例如,如果该值在单处理器服务器上是 25,ASP.NET 则使用运行库 API 将进程限制设置为 25。在双处理器服务器上,该限制设置为 50。默认为 25。
memoryLimit 指定 ASP.NET 在启动新进程和重新分配现有请求前辅助进程可以使用的最大允许内存大小(相对于总系统内存的百分比)。默认值为 40%。
password 如果存在(并且与 userName 一起使用),该属性使辅助进程与已配置的 Windows 标识一起运行。默认值为 autogenerate。请参阅 userName 了解有关特殊名称 System 和 Machine 的更详细信息,它们不要求密码。
pingFrequency 以标准进程模型格式 (hr:min:sec) 指定时间间隔,该时间间隔是 ISAPI 扩展对辅助进程执行 ping 命令来查看其是否正在运行所采用的时间间隔。如果在 pingTimeout 时间间隔内该辅助进程没有运行,则重新启动该辅助进程。默认为 30 秒。
pingTimeout 以标准进程模型格式 (hr:min:sec) 指定时间间隔,在该时间间隔后,非可响应辅助进程重新启动。ISAPI 扩展在 pingFrequency 时间间隔后对辅助进程执行 ping 命令。如果辅助进程在 pingTimeout 时间间隔内未响应,则重新启动该进程。默认为 5 秒。
requestLimit 指定 ASP.NET 自动启动新辅助进程以代替当前辅助进程前允许的请求的数目。默认为无限。
requestQueueLimit 指定在 ASP.NET 开始将“503 - 服务器太忙”错误信息返回给新请求前允许的请求的数目。默认为 5000。
responseDeadlockInterval 以标准进程模型格式 (hr:min:sec) 指定时间间隔,在该时间间隔后,进程如果满足以下条件将重新启动:
有排队的请求。
在此时间间隔期间没有响应。
默认为 3 分钟。

responseRestartDeadlockInterval 指定在重新启动进程以再次解决死锁情况前、在最后一次启动进程以解决死锁情况后必须经过的时间,该时间以标准进程模型格式 (hh:mm:ss|infinite) 表示。这防止在要求相当长启动时间的进程中出现系统颠簸。默认为 9 分钟。
serverErrorMessageFile 如果该属性存在,则指定在发生致命错误时将用来代替默认显示的“服务器不可用”消息的文件的内容。该文件位置是相对于 Machine.config 的位置,或者可以是绝对文件路径。如果该属性不存在,将使用默认的“服务器不可用”消息。
shutdownTimeout 指定为辅助进程关闭其自身允许的分钟数。在超时过期后,ASP.NET 关闭辅助进程。该时间以 hr:min:sec 字符串格式表示。默认值为 5 秒钟,即 0:00:05。
timeout 指定分钟数,超过该分钟数 ASP.NET 将启动新的辅助进程以替代当前辅助进程。默认为无限。
userName 如果存在该属性,则该属性使用与默认进程的 Windows 标识不同的 Windows 标识运行辅助进程。默认情况下,进程作为 IIS 标识 (System) 运行。如果在 userName 和 password 属性中存在有效的凭据,则该进程与给定账户一起运行。其他的特殊值是 Machine,该值在与作为 password 值的 autogenerate 一起使用时将进程作为无特权的 ASP.NET 服务账户运行。默认值是 System。
webGarden 在与 cpuMask 属性一起使用时控制 CPU 关系。(多处理器 Web 服务器称作网络园)。
True 指示由 Windows 操作系统安排 CPU 使用。默认值为 true。
False 指示 cpuMask 属性用于指定哪些 CPU 可以运行 ASP.NET 进程。
monkey_zeng 2003-03-13
  • 打赏
  • 举报
回复
to: 大家,特别是to:dreammaster(天涯),saucer(思归, MS .NET MVP) ,
谢谢~~

虽然现在还不知道能否解决!!!!


hx_li 2003-03-13
  • 打赏
  • 举报
回复
会不会是杀毒软件惹的祸?
前一段时间,我装的杀毒软件Mcafee
我的网站在局域网运行良好,一旦放在外网上
用户多了Session就莫名其妙的空掉,页面全都无法正常显示
后来把Mcafee禁用了,就没有出现这种情况
我现在装的是Norton
  • 打赏
  • 举报
回复
建议你不要用Session来做确认用户登录的方式,这样非常消耗系统资源。
使用Cookie方式来确认用户是否登录。
高级的办法是扩展System.Security.Principal.IPrincipal接口,因为微软给出的
HttpContext.User类不支持通过数据库登录的类型,只支持IIS,Passport,Forms的配置文件,和Windows的验证。
只要你继承了System.Security.Principal.IPrincipal接口,可以任意增加这个接口的属性和方法。
首先你自己建立几个类,执行用户登录数据库方面的验证工作。然后你再做一个类,继承System.Security.Principal.IPrincipal这个接口,在构造函数里面可以通过以前建立的数据库验证类来确认用户,然后就可以自己添加属性和方法了。
添加好以后就可以用System.Web.Security.FormsAuthentication类来确认用户是否登录。Cookie写入和检查代码微软也写好了,非常方便。
加载更多回复(12)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧