为什么会话状态与表单身份验证状态不同?

时间:2013-02-05 16:49:55

标签: c# asp.net forms-authentication session-state

也许我错过了一些关于此的基本原理,我只是不明白为什么表单身份验证不是建立在Session之上。

我在表单身份验证超时和会话超时方面遇到了一些问题,我了解如何通过博客帖子来解决这些问题like this one.

但他们为什么分开?

2 个答案:

答案 0 :(得分:4)

  

我只是不明白为什么表单身份验证不是在Session之上构建的。

表单身份验证使用在所有应用程序中都很常见的Cookie。只有当前经过身份验证的用户名才会存储在Cookie中。另一方面,会话可以存储任意大的值,因为它存储在服务器上。您无法将任意大数据保存到Cookie中。会话状态有很多问题。例如,如果您在Web场中运行,则需要确保使用进程外会话持久性而不是默认的InProc,以便Web场的所有节点可以共享相同的会话数据。我个人从不在我的应用程序中使用会话。我要做的第一件事就是确保在web.config中禁用所有会话状态:

<sessionState mode="Off" />

这样我确信没有开发项目的开发人员会犯下使用ASP.NET会话的错误。他们将无国籍的网络应用程序变为有状态。

使用cookies你没有这样的问题。您可以将所需的节点丢弃到Web场,以面对不断增加的用户负载,而无需担心服务器上的任何状态。

答案 1 :(得分:2)

基本是因为有些人可能选择只使用其中一个,因为它们是两个不同的模块 - 并且都提供了自定义界面。

同样一个用户可以在没有经过身份验证的情况下进行会话

另外一些(像我一样)可以完全自定义会话模块,但保留身份验证模块。

所以这是两个不同的模块,无法连接。