它并没有明确地写在某个地方,但在读了几篇关于ASP的博客后,我感觉如此.NET MVC.只是有点好奇,想在这里问一下.

UPDATE:
I'm not asking about memory/storage/RAM concerns on server. For them, there is a solution to store session out of process. I know that. I'm curious that, are there any scenarios where we had to use Session in WebForms but we can avoid it now in MVC taking benefit of the nice structured way offered by MVC?

推荐答案

在ASP.NET Web表单,如果不使用会话,在不同页面之间传递信息从来都不是特别容易.由于以回发为中心的模式,信息作为事件的一部分在服务器上可用,但通常在错误的页面中显示结果,因此需要在页面之间传递信息.

这往往会导致会话的过度使用,在会话中填充"当前"变量,以指示与之交互的当前对象是什么.这种过度使用反过来又使应用程序非常依赖于状态,更难确定预期行为("这个变量是否已填充?""我有当前订单ID吗?").

MVC是围绕这样的理念构建的,即您的网站是进入信息逻辑模型的视图.它鼓励使用简单的控制器来响应操作,并将关键信息作为HTTP请求的一部分进行传递,从而鼓励有stateless个操作.

由于这些特性,会话不再需要在MVC中执行基本任务,并且在以前似乎是一个完全有效的 Select 的地方变得不适合.


基本上是session pollutes HTTP.它使请求(通常包含它们自己的状态)依赖于接收服务器的内部状态.这就是为什么它被视为一种邪恶(尽管通常是一种实际和必要的邪恶).

Asp.net相关问答推荐

在Docker Windows中,ASP.NET核心容器在自定义端口8080上运行,但ASP.NET容器在固定端口80上运行

设置主键时KeyAttribute属性不起作用

Razor 页面客户端站点验证不起作用

如何在 ASP.​NET Core 中使用 jquery

RNGCryptoServiceProvider - 随机数审核

带有模型的 mvc 上传文件 - 第二个参数发布的文件为空

在 DataTextField 中组合两个字段.这可能吗?

正在检索组件的 COM 类工厂......错误:80070005 访问被拒绝. (来自 HRESULT 的异常:0x80070005 (E_ACCESSDENIED))

将存储过程中 Select 查询的结果返回到列表

HTTP 错误 401.3 - 未经授权

页面在谷歌浏览器中加载两次

在 ASP.NET 中使用 Messenger Connect 客户端库时出现 Javascript 错误

什么是实体框架中的复杂类型以及何时使用它?

不能在 DropDownList 中 Select 多个项目

在 Asp.Net Core 中动态更改连接字符串

避免在 ASP.NET MVC 中使用会话状态是一种好习惯吗?如果是,为什么以及如何?

如何将我的 Autofac 容器插入 ASP. NET 身份 2.1

ASP.NET MVC 5 Web.config:FormsAuthenticationModule或FormsAuthentication

判断 IQueryable 结果集的最佳方法是什么?

ModelClientValidationRule 冲突