Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC应用中面临的会话问题_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 3_Session - Fatal编程技术网

C# MVC应用中面临的会话问题

C# MVC应用中面临的会话问题,c#,asp.net,asp.net-mvc,asp.net-mvc-3,session,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Session,我使用的是Asp.Net成员身份,当用户输入正确的用户名和密码时,我会使用以下方式让他登录: FormsAuthentication.SetAuthCookie(String, Boolean) 如果我创建了一个持久cookie,那么我认为我的成员资格仍然可以工作,但是我的会话数据将为空 这真的是在我的应用程序中添加注释并引入了很多错误。我该怎么办 我应该处理global.asax的应用程序_AuthenticateRequest并检查我在会话中存储的用户ID是否为null以及Membersh

我使用的是Asp.Net成员身份,当用户输入正确的用户名和密码时,我会使用以下方式让他登录:

FormsAuthentication.SetAuthCookie(String, Boolean)
如果我创建了一个持久cookie,那么我认为我的成员资格仍然可以工作,但是我的会话数据将为空

这真的是在我的应用程序中添加注释并引入了很多错误。我该怎么办

我应该处理global.asax的应用程序_AuthenticateRequest并检查我在会话中存储的用户ID是否为null以及
Membership.GetUser()
是否为null,然后我应该在会话中再次存储ProviderUserKey(Guid)


这是一种合理的方法,还是有更好的处理方法?

我认为,您需要使用会话而不是cookie。 根据我的说法,在会话或任何地方保存ProviderUserKey都不可取。 使用global.asax(Application_AuthenticateRequest)检查身份验证,并基于该id从DB获取ProviderUserKey


希望我的评论对您有用。

我认为,您需要使用会话而不是cookie。 根据我的说法,在会话或任何地方保存ProviderUserKey都不可取。 使用global.asax(Application_AuthenticateRequest)检查身份验证,并基于该id从DB获取ProviderUserKey


希望我的评论对您有用。

会话和AuthCookie是不同的。authcookies的生存时间可以在
forms timeout=“5”
config部分中设置,会话生存时间应该在
sessionState timeout=“5”
config部分中设置。身份验证cookie可能仍然存在,但会话将过期。检查此项。

会话和AuthCookie不同。authcookies的生存时间可以在
forms timeout=“5”
config部分中设置,会话生存时间应该在
sessionState timeout=“5”
config部分中设置。身份验证cookie可能仍然存在,但会话将过期。选中此项。

您必须在
web.config
文件中配置会话和authcookie的生命周期。见:

<forms timeout="5" />

<sessionState timeout="5" />

表单用于身份验证,当它超时时将注销 用户。您可以通过设置SlidingExpiration属性来“防止”超时 设置为“true”,它将在用户活动时更新表单票证(阅读 如果需要,请求asp。这将使用户在登录时保持登录 “活动”在您的站点上

当会话超时时,您将丢失在会话对象中找到的数据

你的问题可能就是这个问题。您的身份验证cookie处于活动状态,但会话超时。用户已登录,但会话变量已销毁!在应用程序中检查此配置



您必须在
web.config
文件中配置会话和authcookie的生命周期。见:

<forms timeout="5" />

<sessionState timeout="5" />

表单用于身份验证,当它超时时将注销 用户。您可以通过设置SlidingExpiration属性来“防止”超时 设置为“true”,它将在用户活动时更新表单票证(阅读 如果需要,请求asp。这将使用户在登录时保持登录 “活动”在您的站点上

当会话超时时,您将丢失在会话对象中找到的数据

你的问题可能就是这个问题。您的身份验证cookie处于活动状态,但会话超时。用户已登录,但会话变量已销毁!在应用程序中检查此配置



你最后的“检查这个”是什么意思?我知道auth cookie是持久的。那么如何在会话中再次设置数据呢?最好的方法是什么?你最后的“检查这个”意味着什么?我知道auth cookie是持久的。那么如何在会话中再次设置数据呢?最好的方法是什么?我不想将表单和会话状态超时设置为相同。如果它们不同呢?然后如何在会话中再次设置数据?最好的方法是什么?如果会话超时,您必须重新填充它的数据。或者,您可以将灯光数据放在cookie中,而不是会话中。例如,我通常将名字、姓氏、电子邮件等保存在cookies中。此外,您还可以在cookie中放置重数据,但不建议这样做。此外,不建议在会话中放置重对象。所以1-如果你有少量数据,把它们放在cookie中(而不是会话)2-如果你有大而重的对象,最好在需要时从数据库中选择它们。我不想将表单和会话状态超时设置为相同。如果它们不同呢?然后如何在会话中再次设置数据?最好的方法是什么?如果会话超时,您必须重新填充它的数据。或者,您可以将灯光数据放在cookie中,而不是会话中。例如,我通常将名字、姓氏、电子邮件等保存在cookies中。此外,您还可以在cookie中放置重数据,但不建议这样做。此外,不建议在会话中放置重对象。所以1-若你们有轻数据,把它们放在cookie中(而不是会话中)2-若你们有大而重的对象,最好在你们需要的时候从数据库中选择它们。