Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从IIS获取托管Asp.Net网站的运行会话数_C#_Asp.net_Iis_Hosting - Fatal编程技术网

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

C# 从IIS获取托管Asp.Net网站的运行会话数,c#,asp.net,iis,hosting,C#,Asp.net,Iis,Hosting,我正在IIS 6.0中托管一个Asp.Net网站 我们必须在web.config中重置会话超时 我的客户希望我仅在没有会话运行(没有人使用该站点)时重置它 我们尚未使用成员身份,SessionState设置为InProc 我如何知道是否有人使用该网站或任何会话正在运行 除了托管网站中的web.config之外,我无法对源代码或任何其他文件进行更改。嘿,如果有人正在使用该网站,会话超时将不会执行 所以不用担心 (Timeout属性指定分配给应用程序会话对象的超时时间,以分钟为单位。如果用户在超时时

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

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

我的客户希望我仅在没有会话运行(没有人使用该站点)时重置它

我们尚未使用成员身份,SessionState设置为InProc

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


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

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

所以不用担心

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

) 与IIS的会话

与配置文件的会话

在会话开始和会话结束事件中,不断递增和取消应用程序变量。然后您将获得会话计数。如果sesson count为零,则可以重置该对象。祝您一切顺利。

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

如果最后一次点击时间早于当前会话超时时间,则不存在活动会话。这才是你真正想要的,而不是一个计数


无需编程或破解。

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

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

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

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

我想“目标”还需要更清晰的描述——比如你在追求什么?重置的目标不是你想要实现的真正“目标”

更新:


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

我对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文件之类的脚本。出于安全原因,您必须授予对进程或用户的访问权限。以下各点也是如此:

  • 打开命令提示符并以管理员身份运行
  • 键入
    powershell
  • 键入
    Set ExecutionPolicy-范围进程旁路
  • 键入
    sl
    sl
    [设置位置]类似于命令提示符中的
    cd
  • 键入
    $。\ChangeIIS.ps1'
  • 它将立即运行并重置该值

    这里是我的博客的链接
    以一种更为循序渐进的方式

    我想更改特定asp.net应用程序的web.config文件中的会话超时。然后,您提供的链接告诉我IIS中的会话超时。当我更改web.config时,所有会话都将过期。亲爱的。。。如果您使用web.config更改了任何内容(不仅仅是会话)。。。。会话总是过期。。。这是微软的规则。。所以不可能实现…尝试使用会话模式=sql server…谢谢你的回答,我可以看到日志文件夹,但当我尝试打开它时,它表明我没有访问权限。你能发布你尝试打开的文件夹路径吗?另外,您要打开的是文件夹还是日志文件?如果您是网站的宿主,您应该拥有一个权限级别较高的帐户?在IIS6上,日志默认为文件夹C:\Windows\System32\LogFiles\然后是子文件夹W3SVC 12345678。您是否可以使用IIS6管理器检查站点上是否启用了日志记录,这将显示实际的文件夹路径和W3SVC文件夹名称。这看起来很奇怪,因为这表明可以从浏览器请求日志,这可能是一个安全弱点。无论如何,我认为我们的观点是,如果你在你的服务器上托管一个网站,而你不能查看服务器上的日志文件,那么你就有用户许可问题。修复这些问题,然后读取您的日志文件。这是一个共享主机,谁知道它们是如何让您访问日志的:)所以他想添加一个新功能,而不更改代码?这在任何情况下都是不可能的,但是您可以通过跟踪活动(而不是会话)来获得最佳猜测。也就是说,唯一的其他选项如前所述,请查看日志文件。另外,由于它是一个共享主机,可能他们在站点控制面板(如果他们给你的话)中有一些显示日志/活动的功能?也许打电话给他们,请求类似的帮助,或者看看他们能帮你什么。我对PowerShell一无所知。你能举例说明如何创建和执行它吗?在服务器上运行安全吗?是的,它是安全的,因为你知道脚本在做什么。这看起来很棒,测试后会让你知道。我运行