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

时间:2012-03-16 09:18:06

标签: c# asp.net iis hosting

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:3)

我对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 [set-location]与命令提示符中的cd类似
  5. 输入$ '.\ChangeIIS.ps1'
  6. 它将立即运行并重置该值。

    以下是how I created the PowerShell script上我博客的链接  以更加循序渐进的方式

答案 1 :(得分:2)

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

如果最后一次命中时间早于当前会话超时,则不存在活动会话。这就是你实际想要的,而不是计数。

无需编程或黑客攻击。

答案 2 :(得分:1)

如果有人正在使用网站,嘿会话超时不会被执行..

所以不用担心

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

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

使用配置文件进行会话 http://msdn.microsoft.com/en-us/library/ms178586.aspx

答案 3 :(得分:1)

我认为这里的简单答案是“not possible”..你活着就学习了,看看 ASP.NET性能计数器的回答。我对这是怎么回事(如果它对您有用),并且它是否为您提供特定于应用程序的数据(与aggregate of all applications on the box对比?)。

即使是查看日志文件的建议也无法满足您的需求 - 当您查看日志文件时,您如何知道没有用户启动会话?

会话是浏览器的Cookie。因此,如果访问您网站的1页,我会离开您的网站并转到其他网站,然后回来(在您设置的超时值之前)?你会如何定义?在我离开您的网站时,您将看不到“任何”活动(无论您使用什么监视器),但这并不意味着我的会话“已过期”。

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

我想“目标”需要更清晰 - 就像你追求的是什么?重置的目标不是你想要实现的目标。

<强>更新

我知道您说无法修改源代码,因此您可以希望它实现Google Analytics。如果是这样,您可以查看您网站的实时活动。这至少会让你以某种微不足道的方式“某处”。 同样,“魔力”基于 cookies (因此意味着它仍然受我上面提出的问题的影响)