ASP.NET_SessionId vs .ASPXAUTH为什么我们需要它们?

时间:2014-05-20 11:34:48

标签: asp.net asp.net-mvc-3 asp.net-mvc-4 asp-classic

如果用户登录或不登录,我们是否只能存储在会话中并删除.ASPXAUTH?

4 个答案:

答案 0 :(得分:24)

ASP.Net_SessionId 是一个Cookie,用于标识服务器上的用户session。会话是服务器上的一个区域,可用于在http请求之间存储数据。

例如,控制器操作可以执行:

Session["FirstName"] = model.FirstName;

然后,在后续操作中,可以从会话中检索第一个名称:

var firstName = Session["FirstName"];

ASP.Net_SessionId标识该用户请求的会话。不同的用户将提交不同的Cookie,因此Session["FirstName"]将为该不同的用户保留不同的值。

ASPXAUTH 是一个Cookie,用于标识用户是否为authenticated(即已验证其身份)。例如,控制器操作可以确定用户是否提供了正确的登录凭据,如果是,则发出身份验证cookie using

FormsAuthentication.SetAuthCookie(username, false);

稍后您可以使用[Authorize]属性检查用户是否有权执行操作,该属性会检查是否存在ASPXAUTH Cookie。

总而言之,cookie有两种不同的用途。一个用于确定用户会话状态,另一个用于确定用户是否已通过身份验证。

要完成你的问题的答案,是的,你可以摆脱ASPXAUTH cookie并只使用session来识别用户(我已经在旧的经典asp应用程序中看到过这种情况)但我不会#39 ;推荐它。更清楚地分离关注点并在必要时使用适当的方法。会话和身份验证将设置自己的超时值。通过使用会话进行身份验证,您将只有一次超时。我不确定在使用会话进行身份验证时是否存在任何安全隐患,但我仍然会将它们分开。

答案 1 :(得分:5)

.NET发布了一个完全不同的cookie,名为ASP.NET_SessionId,用于跟踪会话状态。

ASPXAUTH cookie用于确定用户是否经过身份验证。

所以这些是两个不同的概念,即使用表单身份验证的会话状态管理和身份验证管理。

如果您使用会话进行身份验证并忘记表格身份验证,您将摆脱.ASPXAUTH

答案 2 :(得分:1)

两者都是必需的,使用导致以下漏洞:

*单独的ASP.NET_SessionId:会话修复

*表单身份验证Cookie单独:无法在服务器上终止身份验证令牌

此外,您需要确保它们正确耦合在一起。否则,配置也会带来风险:

*松散耦合的ASP.NET_SessionID和表单身份验证Cookie:仍然易受攻击

REF: http://blog.securityps.com/2013/06/session-fixation-forms-authentication.html

答案 3 :(得分:-1)

会话状态和身份验证彼此无关。你可以使用一个而不用另一个。