我正在使用Asp.Net会员资格,当用户输入正确的用户名和密码时,我使用以下方式签名:
FormsAuthentication.SetAuthCookie(String, Boolean)
如果我创建了一个持久性cookie,那么我认为我的会员资格仍然可以工作,但我的会话数据将为空。
这真的是在我的应用程序中引入并引入了很多错误。我怎么处理这个?
我应该处理global.asax的Application_AuthenticateRequest并检查我在会话中存储的userId是否为空且Membership.GetUser()
不为空,那么我应该在Session中再次存储ProviderUserKey(Guid)。
这是一种合理的方法还是有更好的方法来解决这个问题?
答案 0 :(得分:2)
您必须在web.config
文件中配置会话和authcookie的生命周期。参见:
<forms timeout="5" />
<sessionState timeout="5" />
表单用于身份验证,超时表单将注销 用户。您可以通过设置SlidingExpiration属性来“阻止”超时 为'true',它将更新用户活动的表单票据(阅读 如果需要,请求asp)。这将使用户保持登录状态 在您的网站上“活跃”。
和
当会话超时时,您将丢失在Session对象中找到的数据。
您的问题可能出在这个问题上。您的auth-cookie已存在,但会话已超时。用户已登录,但会话变量已被破坏!在您的应用中检查此配置。
答案 1 :(得分:1)
forms timeout="5"
config-section中设置,会话生命周期应该在sessionState timeout="5"
config-section中设置。 auth-cookie可能仍然存在,但会话到期。检查一下。
答案 2 :(得分:0)
我认为,你需要使用session而不是cookie。 根据我的说法,在会话或任何地方保存ProviderUserKey应该是不可取的。 使用global.asax(Application_AuthenticateRequest)进行检查身份验证,并根据该ID从DB获取ProviderUserKey。
希望我的评论对你有用。