从IIS获取我托管的Asp.Net网站的运行会话计数

本文关键字:运行 网站 会话 Net Asp 获取 IIS | 更新日期: 2023-09-27 18:28:04

我正在IIS 6.0 中托管一个Asp.Net网站

我们必须在web.config 中重置会话超时

我的客户端希望我只有在没有会话运行(没有人使用该网站)的情况下才重置它。

我们没有使用Membership,SessionState设置为InProc

我如何知道是否有人在使用该网站或任何会话。

除了托管网站中的web.config之外,我无法更改源代码或任何其他文件。

从IIS获取我托管的Asp.Net网站的运行会话计数

我不擅长PowerShell,所以希望你能找到正确的语法。但是

一种选择是运行Powershell脚本并检查会话计数,如下所示:

更新:已将"会话总数"更改为"活动会话"

write-host Getting performance counters ...
$perfCounterString = "'asp.net applications(__total__)'sessions active" 
$counter = get-counter -counter $perfCounterString 
$rawValue = $counter.CounterSamples[0].CookedValue 
write-host Session Count is $rawValue
if( $rawValue -gt 0)
{
   write-host Session are active - will not stop IIS
   exit
}
write-host Stopping IIS
stop-service "IISAdmin"
# Set values 
$webConfig = "d:'web.config"
$newTimeout = "20"
# Open file and change value
$doc = new-object System.Xml.XmlDocument
$doc.Load($webConfig)
$doc.SelectSingleNode("//sessionState").timeout = $newTimeout
$doc.Save($webConfig)
write-host Starting IIS
start-service "IISAdmin"
write-host Done!

在桌面上将其保存为"ChangeIIS.ps1"。

现在Powershell不喜欢你只运行像.bat文件这样的脚本。出于安全原因,您必须授予对进程或用户的访问权限。因此,请执行以下操作:

  1. 打开命令提示符并以管理员身份运行
  2. 类型powershell
  3. 类型Set-ExecutionPolicy -scope process Bypass
  4. 键入sl <path to directory of .sp1 file>sl[设置位置]类似于命令提示符中的cd
  5. 类型$ '.'ChangeIIS.ps1'

它将立即运行并重置值。

以下是我的博客链接,介绍我如何创建PowerShell脚本以更循序渐进的方式

检查您网站的IIS日志文件,查看最后一次点击是什么时候(由实际用户而不是搜索机器人)。

如果上次命中时间早于当前会话超时时间,则不存在活动会话。这才是你真正想要的,而不是计数。

无需编程或破解。

嘿,如果有人正在使用站点,会话超时将不会执行。。

所以无需担心

(Timeout属性指定分配给应用程序会话对象的超时时间,以分钟为单位。如果用户在超时时间内没有刷新或请求页面,会话将结束。

)会话WIth IIShttp://msdn.microsoft.com/en-us/library/ms525473(v=vs.90).aspx

带有配置文件的会话http://msdn.microsoft.com/en-us/library/ms178586.aspx

我认为这里的简单答案是"不可能"。。您在学习中生活,请参阅ASP.NET性能计数器上的答案。我非常感兴趣的是它是如何进行的(如果它对你有效的话),以及它是否为你提供了特定于应用程序的数据(相对于盒子上所有应用程序的聚合?)。

即使是查看日志文件的建议也不会得到你想要的——当你查看日志文件时,你怎么知道没有用户启动会话?

会话是浏览器的cookie。所以,如果访问你网站上的一个页面,我会离开你的网站,去其他网站,然后回来(在你设置的任何超时值之前)?你会如何定义它?当我离开你的网站时,你不会看到"任何"活动(无论你使用什么监视器),但这并不意味着我的会话"过期"。

它甚至不必那么复杂——我访问你的网站,开始阅读你的内容(不导航,不做任何可以测量/监控的事情)。

我想"目标"需要更明确——比如你追求什么?重置的目标并不是你想要实现的真正"目标"。

更新:

我知道你说过你不能修改源代码,所以你可以希望它实现谷歌分析。如果是,您可以查看网站的实时活动。这至少会让你以一些琐碎的方式获得"某个地方"但是同样,"魔法"是基于cookie(因此这意味着它仍然受到我上面提出的问题的影响)

在会话开始和会话结束事件中保持对应用程序变量的递增和递减。那么您将获得会话计数。如果sesson计数为零,那么你可以重置它。一切都好。