5

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

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

请指导我摆脱这个问题?

4

4 回答 4

7

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

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

HttpSessionState.Timeout 属性

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

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

于 2013-01-02T05:18:39.073 回答
1

如果您使用的是 IIS6 或更高版本,则取决于您的应用程序池设置,它可能会影响 w3wp 进程的回收频率。当应用程序池被回收时,您的会话将丢失,除非您使用进程外会话状态管理或 sql 作为会话状态主机。

如果您将超时时间增加到两个小时,单个用户不会经常丢失他们的会话,但它会增加所有浏览该站点的用户在进程被回收时偶尔会被注销的可能性。

于 2013-01-02T05:23:42.253 回答
1

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

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

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

于 2013-01-02T05:25:18.440 回答
0

考虑到如果您尝试在共享托管环境中提高超时值,您将失败,因为他们通过在文件中设置该值来阻止您这样做,machine.config并且帽子是先例,您将需要为此使用SQL Session并且您可以随意更改超时时间。

他们通常还经常重新启动 AppPool 以解除阻止任何可能阻止其他网站的恶意或不良代码,并且每次 AppPool 重新启动时,所有会话都会出现(当然,如果您使用 SQL 会话而不是)...

另一方面,如果您自己托管 Web 应用程序,除了内存大小(请记住,我假设您说的是用户会话,顾名思义,是每个用户,每个应用程序,您将使用应用程序会话)。如果您考虑这种内存增加,则不会降低任何内容,甚至不会降低性能。

于 2013-01-02T05:25:06.873 回答