设置最长会话时间是否有任何缺点或限制?

时间:2013-01-02 05:15:07

标签: c# asp.net session session-state session-timeout

在asp.net中,默认会话超时为20分钟。假设我将会话超时时间更改为2小时或更长时间,那么它是否会导致服务器端出现任何性能问题?

我想知道在asp.net中使用最长会话时间有任何限制或缺点吗?

请指导我解决这个问题?

4 个答案:

答案 0 :(得分:5)

每个用户在服务器上维护会话。会话超时的增加将阻止服务器释放分配给非活动会话的内存。

  

我想知道是否有任何限制或缺点   在asp.net中使用最长会话时间?

HttpSessionState.Timeout Property

  

Timeout属性不能设置为大于525,600的值   分钟(1年)。默认值为20分钟。

<强>缺点: 如果您有大量用户并且会话超时增加,您将遇到性能问题,您的非活动会话将保留在Web服务器内存中,这可能导致应用程序池回收,这将导致所有用户丢失所有会话。

答案 1 :(得分:1)

如果您使用的是IIS6或更高版本,则根据您的应用程序池设置,它可能会影响w3wp进程的回收频率。当应用程序池被回收时,除非您使用out-of-process session state management或sql作为会话状态主机,否则会话将丢失。

如果将超时时间增加到两个小时,个别用户不会经常丢失会话,但会增加浏览网站的所有用户在回收流程时偶尔会被注销的几率。

答案 2 :(得分:1)

增加会话时间意味着闲置的网页不太可能超时(例如,如果用户去吃午餐而不打开网页)。但是,这会占用更多的服务器资源,因为正如Habib所说,服务器必须在此期间存储用户信息。

这也可能是一种安全风险。如果用户关闭网页而不是注销,则会增加CSRF攻击的窗口。

最好的办法是了解用户如何使用网页。如果页面必须长时间保持打开状态,请查看页面的定期回调或刷新。或者,如果站点对安全性敏感,请考虑在一段时间不活动后自动将用户注销。

答案 3 :(得分:0)

请注意,如果您尝试在共享托管环境中提高超时值,则会因为在machine.config文件和帽子中设置该值而阻止您,因此会失败先例,您需要使用 SQL Session ,并且您可以随意更改超时时间。

他们通常也经常重启AppPool以解除阻止可能阻止其他网站的任何恶意代码或恶意代码,每次AppPool重新启动时,这里都会进行所有会话(当然,如果您使用的是SQL会话)。

另一方面,如果您的自己托管网络应用程序,除了内存大小(请记住我假设您正在说用户会话并且作为name表示,每个用户,每个应用程序,您将使用应用程序会话)。如果你认为这种记忆增加,没有什么,甚至表现都不会减少。