asp.net - 使用 Session 存储登录的用户 ID 好不好?或者有没有更简单的方法?
问题描述
我们在 ASP.Net Webforms 中有一个登录表单。当用户登录时,我们将用户 ID 保存到会话状态。
Session["CurrentUserId"] = user.Id;
所以这就是我们知道用户登录的方式。
if(Session["CurrentUserId"] == null) Redirect("Login.aspx");
这就是我们使用 Session 的全部目的。我将会话存储在 DynamoDB 中,因为我们有许多负载平衡服务器。但有时 DynamoDB 会过载或出错。所以我试图摆脱会话状态以避免这些错误并简化登录过程。
那么有哪些替代方案呢?现代网站如何让人们登录并记住他们已登录,并在 x 分钟后超时?
有没有办法使用安全 cookie 来做到这一点?如果用户在 20 分钟内没有做任何事情,你将如何过期?它必须在一组 Web 服务器上工作。
解决方案
如果您使用标准的 FBA 登录提供商?
您可以通过以下方式获取用户登录 ID:
Membership.GetUser.ProviderUserKey
您可以通过以下方式获取用户电子邮件:
Membership.GetUser.Email
因此,可以使用上面的方法获取用户登录 ID。
至于 session() 是一个瓶颈?
好吧,这并不是那么糟糕 - 你不会通过这样做来“更新” session() 值,所以它当然不必每次都写回(对于一个帖子),这也意味着对 session() 的锁定在回传等期间不应发生。
但是,我会考虑上述两种方法中的一种,因为此后 session() 重置或其他任何事情对于获取用户 ID 或电子邮件都无关紧要。
如前所述,这在很大程度上取决于您在此处使用的安全和身份验证提供程序。
推荐阅读
- java - 如何在android studio中为监听器回调编写Junit测试用例?
- azure-queues - 毒药队列内容进入主队列
- sql - 如何将网站数据导入 SAP WEBI
- wordpress - 你正在寻找的页面暂时不可用。请稍后再试
- azure-devops - 是否可以构建一个 CI 管道,其中开发和测试自动化代码作为 Azure Devops 上的两个不同项目分别维护
- javascript - 带有 GetElementsByClass 的计数器中的双“if”函数
- three.js - three.js:在 three.js 中为自定义几何体计算适当的 uv 纹理映射
- amazon-web-services - 尝试连接 aws ec2 实例时出现网络错误
- c# - C# WinForm 二维数组
- java - 初始化程序未正常完成