【问题标题】:How to check for user's first access to site?如何检查用户首次访问网站?
【发布时间】:2014-09-03 16:54:09
【问题描述】:

如何检查用户在会话过期后是否访问了我的网站?我在用户登录时设置了一些 Session 值,但我刚刚发现了一种与解决方案有点混淆的行为。我在登录用户时设置了这些值。

但刚刚发生的事情是我昨天登录(社交登录)并关闭了浏览器。今天,当我再次访问该站点时,我已经登录了,但我的会话已经完成,因为我不再拥有这些值了。

所以我的问题是:MVC4 在哪里检查用户是否登录?我可以将事件处理程序附加到该操作吗?或者像我在 Global.asax 中那样添加一些过滤器?还是有更好的方法来解决我的问题?有没有比我正在做或建议的更好的方法来添加会话值?

我在Where/how to populate session with user stored in cookie data in MVC app on first load? 读到 session_start 将是一个开始的地方,虽然我不想使用 getter 实例化方法,因为我只使用 Session 的字典。

有什么想法吗?

谢谢!

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4 session forms-authentication


    【解决方案1】:

    登录状态存储在 cookie 中。我通常从 Global.asax 中的 cookie 中获取数据并在那里重建会话:

    protected void Application_AuthenticateRequest(object sender, EventArgs e)
    {
        if (HttpContext.Current.User != null)
        {
            if (HttpContext.Current.User.Identity.IsAuthenticated)
            {
                //take HttpContext.Current.User.Identity.Name here
                //and rebuild values in Session if session is empty
            }
        }
    }
    

    请注意,这种方法会在会话中重建值,即使它们以后不使用,但这在大多数网站中应该不是问题。

    【讨论】:

    • 感谢您的回答,该方法是每次用户访问网站时调用还是仅在需要身份验证时调用?
    • @eestein:每个请求都会执行此方法,这就是您检查用户是否不为空的原因。
    猜你喜欢
    • 2019-10-25
    • 1970-01-01
    • 2015-01-19
    • 2014-08-28
    • 2013-10-16
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多