7

为 ASP.NET 应用程序提出的要求之一是我们在全局范围内禁用会话状态。(这是没有商量余地的。)

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

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

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

  • 用户未经身份验证访问网站
  • 用户输入注册信息(联系方式等)
  • 在剩余的会话中,用户可以访问某些内容,这要归功于他们的注册状态

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

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

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

4

3 回答 3

12

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

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

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

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

于 2009-04-03T23:30:11.653 回答
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。

于 2009-04-03T23:38:20.353 回答
0

是的,您可以使用 cookie。

cookie 的问题在于,您无法向它们保留大量数据。对于向导类型注册,我将数据存储在数据库中,然后将行键/ID 存储在加密的 cookie 中。这样,当用户进入下一步时,您可以从数据库中检索数据。

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

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

于 2009-04-03T23:36:57.627 回答