首页 > 解决方案 > 使用 Session 存储登录的用户 ID 好不好?或者有没有更简单的方法?

问题描述

我们在 ASP.Net Webforms 中有一个登录表单。当用户登录时,我们将用户 ID 保存到会话状态。

Session["CurrentUserId"] = user.Id;

所以这就是我们知道用户登录的方式。

if(Session["CurrentUserId"] == null) Redirect("Login.aspx");

这就是我们使用 Session 的全部目的。我将会话存储在 DynamoDB 中,因为我们有许多负载平衡服务器。但有时 DynamoDB 会过载或出错。所以我试图摆脱会话状态以避免这些错误并简化登录过程。

那么有哪些替代方案呢?现代网站如何让人们登录并记住他们已登录,并在 x 分钟后超时?

有没有办法使用安全 cookie 来做到这一点?如果用户在 20 分钟内没有做任何事情,你将如何过期?它必须在一组 Web 服务器上工作。

标签: asp.netwebforms

解决方案


如果您使用标准的 FBA 登录提供商?

您可以通过以下方式获取用户登录 ID:

 Membership.GetUser.ProviderUserKey

您可以通过以下方式获取用户电子邮件:

 Membership.GetUser.Email

因此,可以使用上面的方法获取用户登录 ID。

至于 session() 是一个瓶颈?

好吧,这并不是那么糟糕 - 你不会通过这样做来“更新” session() 值,所以它当然不必每次都写回(对于一个帖子),这也意味着对 session() 的锁定在回传等期间不应发生。

但是,我会考虑上述两种方法中的一种,因为此后 session() 重置或其他任何事情对于获取用户 ID 或电子邮件都无关紧要。

如前所述,这在很大程度上取决于您在此处使用的安全和身份验证提供程序。


推荐阅读