Asp.net mvc 如何最好地存储从登录到注销都必须持久的ID

Asp.net mvc 如何最好地存储从登录到注销都必须持久的ID,asp.net-mvc,persistence,session-variables,Asp.net Mvc,Persistence,Session Variables,从用户登录(声明)到用户手动或通过会话超时注销,保持ID的最佳方式是什么?我尝试使用静态类,但它被释放,因此我的属性为null HttpContext.Current.Session是一个可行的解决方案吗?因此,当用户登录时,我基本上可以这样做: HttpContext.Current.Session["MyCustomID"] = somevalue; 当用户注销时: HttpContext.Current.Session["MyCustomID"] = null; 我发现最好的解决方案是

从用户登录(声明)到用户手动或通过会话超时注销,保持ID的最佳方式是什么?我尝试使用静态类,但它被释放,因此我的属性为null

HttpContext.Current.Session是一个可行的解决方案吗?因此,当用户登录时,我基本上可以这样做:

HttpContext.Current.Session["MyCustomID"] = somevalue;
当用户注销时:

HttpContext.Current.Session["MyCustomID"] = null;

我发现最好的解决方案是将其存储在DB中,这样您就可以始终将其与原始会话UID相匹配。它还帮助我记录与每个会话相关的内容。不利的一面是速度,当您有很多访问者时,它会变得更加棘手,所以您希望将数据读/写量保持在最低限度

您还可以模仿其他服务器的解决方案,即将其写入临时文件,然后再次管理并将i/O限制在最低限度。不过我更喜欢DB解决方案


归根结底,会话可能会由于多种原因(例如:服务器重启、应用程序重新编译、会话超时、应用程序池刷新等)而丢失,因此无论使用的是哪个对象,将其保存在内存中都可能会丢失,即:HttpContext.Current.session(会话状态),singleton类有一个包含当前会话、静态类等的大型字典。

我发现最好的解决方案是将其存储在DB中,这样您就可以始终将其与原始会话UID相匹配。它还帮助我记录与每个会话相关的内容。不利的一面是速度,当您有很多访问者时,它会变得更加棘手,所以您希望将数据读/写量保持在最低限度

您还可以模仿其他服务器的解决方案,即将其写入临时文件,然后再次管理并将i/O限制在最低限度。不过我更喜欢DB解决方案


归根结底,会话可能会由于多种原因(例如:服务器重启、应用程序重新编译、会话超时、应用程序池刷新等)而丢失,因此无论使用的是哪个对象,将其保存在内存中都可能会丢失,即:HttpContext.Current.session(会话状态),singleton类包含一个包含当前会话、静态类等的大型字典。

我可能会警告您,如果您的身份验证基于存储为会话变量的明文编号,则可能会执行会话劫持。我无法确认这是一条可行的攻击路径,但对我来说似乎是一种可能性。我使用ASP.Identity来访问用户ID/会话变量等,我假设您已经签出了,并且不想在这里实现…?我已经使用ASP.Identity进行身份验证,并将登录用户的ID存储在那里。但是我还需要存储一个动态ID,它可以在用户会话期间更改。您可以使用ASP标识存储动态信息吗?我可能会警告您,如果您的身份验证基于存储为会话变量的明文编号,则可能会执行会话劫持。我无法确认这是一条可行的攻击路径,但对我来说似乎是一种可能性。我使用ASP.Identity来访问用户ID/会话变量等,我假设您已经签出了,并且不想在这里实现…?我已经使用ASP.Identity进行身份验证,并将登录用户的ID存储在那里。但是我还需要存储一个动态ID,它可以在用户会话期间更改。你能用ASP身份存储动态信息吗?对不起,我完全忘了回复你的答案。最后,我使用数据库表以键值对的方式存储会话变量。作为标识符,我没有使用会话的UID,而是使用登录用户的ID,我将其存储在类型为NameIdentifier的声明中。不太完美,但它符合我的目的。对不起,我完全忘了回答你的问题。最后,我使用数据库表以键值对的方式存储会话变量。作为标识符,我没有使用会话的UID,而是使用登录用户的ID,我将其存储在类型为NameIdentifier的声明中。不完美,但它符合我的目的。