如何解决使用 Session 存储登录的用户 ID 好不好?或者有更简单的方法吗?
我们在 ASP.Net Webforms 中有一个登录表单。当用户登录时,我们将用户 ID 保存到会话状态。
Session["CurrentUserId"] = user.Id;
这就是我们如何知道用户已登录。
if(Session["CurrentUserId"] == null) Redirect("Login.aspx");
这就是我们使用 Session 的全部目的。我在 DynamoDB 中存储会话,因为我们有许多负载平衡的服务器。但有时 DynamoDB 会过载或出错。所以我试图摆脱会话状态以避免这些错误并简化登录过程。
那么有哪些替代方案呢?现代网站如何让人们登录并记住他们已登录并在 x 分钟后超时?
有没有办法使用安全 cookie 来做到这一点?如果用户在 20 分钟内没有做任何事情,您将如何使其过期?它必须在一组网络服务器上工作。
解决方法
在会话中存储用户 ID 不一定是坏事,但必须与其他内容结合使用,以保护网站免受 session fixation attack 和 CSRF (also known as "session riding") 之类的影响。如果您使用进程内会话状态,那么在 Web 场中也会出现问题。
在 ASP.NET Web 表单中,标准的身份验证方法是使用 forms authentication,它会在浏览器上放置一个加密的 cookie(“身份验证票”)。您可能还想将用户 ID 放在会话中的某个位置,并将其与身份验证票进行比较,以确保它们匹配。
,如果您使用标准的 FBA 登录提供商?
您可以通过以下方式获取用户登录 ID:
Membership.GetUser.ProviderUserKey
您可以通过此获取用户电子邮件:
Membership.GetUser.Email
因此,可以使用上面的方法获取用户登录 ID。
至于 session() 是瓶颈吗?
好吧,这并不是那么糟糕 - 您不会通过这样做来“更新” session() 值,因此当然不必每次都写回(对于帖子),这也意味着锁定session() 在回发等期间不应发生。
不过,我会考虑上述两种方法中的一种,因为那时 session() 会重新设置,或者其他任何事情对于获取用户 ID 或电子邮件都无关紧要。
如前所述,这在很大程度上取决于您在此处使用的安全和身份验证提供程序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。