【问题标题】:Membership.GetUser gets called from Page_Load when user is logging out? How to prevent this?用户注销时从 Page_Load 调用 Membership.GetUser?如何防止这种情况?
【发布时间】:2009-10-23 21:36:36
【问题描述】:

这可能是它应该发生的方式,但我有一个 aspx 页面,在页面加载事件中,我调用 MembershipUser user = Membership.GetUser() 来获取当前登录用户的信息。现在,如果我没有母版页,这可以正常工作,但在这种情况下,该页面与母版页相关联。发生的情况是,当第一次访问该页面时,用户已登录,因此 Membership.GetUser() 工作正常,但是当用户单击 asp.net 登录控件中的注销链接时,它调用页面加载aspx 页面再次调用 Membership.GetUser() 现在返回 null 并导致错误。

我在不正确的地方调用 Membership.GetUser 吗?我不知道该怎么办?

我是否只需要检查 Membership.GetUser() 是否返回 null?就这么简单吗?

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    如果页面对匿名用户和经过身份验证的用户都可见,那么您需要检查 GetUser 是否返回 null,或检查 User.Identity.IsAuthenticated。

    如果页面不应该对匿名用户可见,您可以绑定到 LoginStatus 控件的 LoggedOut 事件并将用户重定向到适当的页面。

    【讨论】:

    • 用户退出的页面是针对非匿名用户的,所以我想我必须与你所说的 LoggedOut 事件联系起来。在您的回答中,您提到我可以,不应该参与其中,这是否意味着它是一种选择。我有一种感觉,即使我绑定了 LoggedOut 事件,它仍然会在用户注销时调用页面的 Page Load。
    • 我不知道您的应用程序是如何构建的,但 ASP.NET 授权可用于要求身份验证以查看某些页面或文件夹。您可以为在 Page_Init 期间检查身份验证的安全页面创建自定义页面基类。有很多选择,您只需要选择适合您应用的一个即可。
    猜你喜欢
    • 1970-01-01
    • 2017-09-19
    • 1970-01-01
    • 2018-10-16
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 1970-01-01
    相关资源
    最近更新 更多