ASP.NET中没有会话状态的用户身份验证

时间:2009-04-03 23:28:09

标签: asp.net authentication session cookies session-state

为ASP.NET应用程序提出的要求之一是我们全局禁用会话状态。 (这不可协商。)

另一个要求是我们有一些用于身份验证的方法。我正在考虑使用ASP.NET的成员资格提供者模型。

是否可以在没有会话状态的情况下进行用户身份验证?

我们正在寻找的具体用户身份验证示例是:

  • 用户访问未经身份验证的网站
  • 用户输入注册信息(联系人字段等)
  • 在其会话的剩余时间内,由于注册状态
  • ,用户可以访问某些内容

有没有办法用cookies做到这一点?

这可以安全地完成,因此cookie不容易被欺骗吗?

ASP.NET中是否有内置功能来支持这一功能,还是我们需要推出自己的方法?

3 个答案:

答案 0 :(得分:12)

ASP.NET Forms身份验证不使用SessionState。它使用cookie来存储身份验证票证。

您还可以通过编辑web.config文件强制通过SSL渠道发送身份验证票证。

您需要的所有功能都可以在ASP.NET中内置。

http://msdn.microsoft.com/en-us/library/aa480476.aspx

答案 1 :(得分:2)

当然,cookie会做到这一点。

想想基本面。无论如何,会话状态由cookie管理。

这是你做的。

当他们登录时,你会使用他们的用户ID和超时(因此登录仅持续30分钟或其他任何时间)。

取出该字符串,并将其哈希。

(java,不重要)

String cookie = userid + ":" + timeString + ":" + md5(userid + ":" + timeString + ":" + "secretpassword");

然后,当请求到达您的网站时,请检查Cookie。首先检查它的完整性。

String parts[] = cookie.split(":");
String newHash = md5(parts[0] + ":" + parts[1] + ":" + "secret password");
if (!newHash.equals(parts[2])) {
    // boom, cheater!
}

然后检查时间字符串以查看它们是否仍然“登录”,并从那里开始。

确保在每次请求时都要更新cookie。

答案 2 :(得分:0)

是的,你可以使用cookies。

Cookie的问题是,您无法将大量数据保留给他们。对于向导类型注册,我将数据存储在数据库中,然后将行密钥/ Id存储在加密的cookie中。这样,当用户移动到下一步时,您可以从数据库中检索数据。

对于Cookie,您可以为cookie值添加时间戳和加密。我通常不管理用户的身份验证状态。我使用内置的FormsAuthentication类来管理我的Web应用程序的这个方面。

大型网站如:Myspace和Live Search Club,完全依赖cookie作为国家管理。