asp.net - 在asp.net中使用过多 session 的缺点

标签 asp.net session

在 ASP.NET 中, session 使我们能够在用户浏览 Web 应用程序中的 ASP.NET 页面时为用户存储和检索值。但是,不鼓励使用过多的 session 。为什么?使用太多 session 有什么缺点?

感谢那些愿意回答的人。

最佳答案

内存和/或性能

如果您在进程中存储 session 状态(默认),您的所有 session 数据都存储在应用程序池的本地内存中。如果您有成千上万的用户,您就会明白为什么这可能是一个问题。当开发人员在不再需要 session 变量后不删除它们时,问题会变得更糟(这很常见,因为很难控制访问网页的顺序)和/或当用户没有显式注销(例如通过关闭浏览器窗口),这使得所有这些内存仍然分配但不再使用。

如果在进程外存储 session 状态(例如在 SQL Server 或单独的状态服务器中),所有 session 变量最终都会跨越线路。随着您添加更多变量,必须提取越来越多的数据。这最终可能会降低性能。

并发

如果 Web 应用程序使用 session 状态,则必须保护访问 session 状态的数据免受竞争条件和其他多线程问题的影响。因此,ASP.NET 会自动序列化任何使用 session 的请求。如果您同时发送两个请求,在第一个请求完成之前,ASP 甚至不会启动第二个请求。这可能会导致使用大量 AJAX 或其他应该是异步的逻辑的应用程序出现意外和糟糕的性能。

基础设施

如果您将本地内存用于 session 状态,并且您的 Web 应用程序已进行负载平衡,则负载平衡器必须使用 IP 地址或 cookie 强制执行 session 粘性。这限制了负载平衡器处理请求的方式——某个 session 的所有请求总是访问同一台服务器——这会降低整体性能并消除冗余。

数据丢失

如果应用程序池回收,在该应用程序池上运行的所有 session 都会丢失 session 状态,通常需要用户注销并重新开始。

糟糕的代码设计

session 变量本质上是全局变量。过度使用全局变量往往会导致代码结构马虎。变量的范围应始终尽可能严格。

关于asp.net - 在asp.net中使用过多 session 的缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19238008/

相关文章:

php - session 提前结束

c# - 如何在 SQL Server 中存储 Point 数据类型?

asp.net - 使用 vb.net 上传/下载文件

ruby-on-rails - rails 4 : How to decrypt rails 4 session cookie (Given the session key and secret)

PHP:重新加载时重置 session 生命周期

c# - HttpContext session 仅在客户端请求后重置

java - isNew() 如何判断 session 是新 session 还是已在使用中?

c# - 在 ASP.NET 调试期间使用 Activator.CreateInstanceFrom 时类型不匹配

c# - 事件处理程序没有被调用

c# - IHttpHandler 不会接受 DELETE 或 PUT 请求