Impossible cell 754863921 Asked: 2024-09-20 02:12:37 +0800 CST2024-09-20 02:12:37 +0800 CST 2024-09-20 02:12:37 +0800 CST 使用基于会话的身份验证时,我们应该在会话中存储什么? 772 我正在学习如何对我的 Web 应用程序使用基于会话的身份验证,但我不确定应该在会话中存储什么类型的数据。 用户登录后,我需要在会话中保留哪些信息?我应该存储用户密码之类的信息还是只存储他们的 ID? authentication 2 个回答 Voted Scott Mitting 2024-09-20T02:25:33+08:002024-09-20T02:25:33+08:00 由于会话数据存储在服务器上,客户端无法访问,因此组织会话数据的方式有很多,但我从未见过将密码存储在会话中。存储用户名和密码是可行的,但随后您需要在每个请求上执行身份验证步骤以获取用户 ID,这是额外的工作。存储登录用户的主键更有意义。 另外,一般来说,我尽量不将密码存储在额外的地方,即使是在理论上安全的地方。我个人甚至不将密码存储在系统内部,而是依靠可以从密码计算出的哈希值来验证在身份验证过程中是否使用了正确的密码,而无需实际存储它。 在微软的一次编码活动中,演讲者展示了会话身份验证的示例代码,并鼓励用户创建账户并登录,当时我脑子里真的有这个想法。然后,他用用户注册时使用的邮箱和密码对着 Gmail 试了试,看看能否登录到他们的邮箱,结果成功了。 UserID 或 SessionID 都是最有意义的,我也见过权限位字符串。SessionID 很好,因为很多时候管理员用户可以以各种角色登录,包括冒充其他用户来执行管理员用户需要执行的各种操作,尽管您也可以直接将此类功能构建到会话中。 我希望这有帮助! Best Answer VL-9274095 2024-09-20T04:28:48+08:002024-09-20T04:28:48+08:00 首先,您永远不应该以纯文本形式存储密码;即使在数据库中,它们也是以哈希值形式存储的,而不是纯文本。从技术上讲,您可以将哈希值存储在会话中,但通常没有充分的理由这样做。 最简单的方法是将用户 ID存储在会话中(并将SessionID保存在 cookie 中)。这样,每次用户发出请求时,您的服务器端代码都可以从会话中检索用户 ID,并使用它来从数据库中获取任何其他相关用户数据。您还可以在会话中存储其他数据(例如逗号分隔的权限),但请注意,在这种情况下使用 JWT 可能是更好的选择。 另外,请记住,最好使用您所使用的框架(ASP.NET Core、Django 等)提供的身份验证方法,而不是尝试实现您自己的方法。
由于会话数据存储在服务器上,客户端无法访问,因此组织会话数据的方式有很多,但我从未见过将密码存储在会话中。存储用户名和密码是可行的,但随后您需要在每个请求上执行身份验证步骤以获取用户 ID,这是额外的工作。存储登录用户的主键更有意义。
另外,一般来说,我尽量不将密码存储在额外的地方,即使是在理论上安全的地方。我个人甚至不将密码存储在系统内部,而是依靠可以从密码计算出的哈希值来验证在身份验证过程中是否使用了正确的密码,而无需实际存储它。
在微软的一次编码活动中,演讲者展示了会话身份验证的示例代码,并鼓励用户创建账户并登录,当时我脑子里真的有这个想法。然后,他用用户注册时使用的邮箱和密码对着 Gmail 试了试,看看能否登录到他们的邮箱,结果成功了。
UserID 或 SessionID 都是最有意义的,我也见过权限位字符串。SessionID 很好,因为很多时候管理员用户可以以各种角色登录,包括冒充其他用户来执行管理员用户需要执行的各种操作,尽管您也可以直接将此类功能构建到会话中。
我希望这有帮助!
首先,您永远不应该以纯文本形式存储密码;即使在数据库中,它们也是以哈希值形式存储的,而不是纯文本。从技术上讲,您可以将哈希值存储在会话中,但通常没有充分的理由这样做。
最简单的方法是将用户 ID存储在会话中(并将SessionID保存在 cookie 中)。这样,每次用户发出请求时,您的服务器端代码都可以从会话中检索用户 ID,并使用它来从数据库中获取任何其他相关用户数据。您还可以在会话中存储其他数据(例如逗号分隔的权限),但请注意,在这种情况下使用 JWT 可能是更好的选择。
另外,请记住,最好使用您所使用的框架(ASP.NET Core、Django 等)提供的身份验证方法,而不是尝试实现您自己的方法。