1

我正在使用NHibernate事件侦听器在数据库中生成事件日志,并且我正在使用HttpContext.CurrentUser获取当前用户 ID 并将其写入数据库字段。

SessionFactory 实例是单例的,根据文档也是事件侦听器,所以我想知道是否有可能的情况,当当前用户已经更改时,该事件侦听器将调用 HttpContext.CurrentUser,这意味着在事件中将记录没有任何内容的用户做改变?

如果更改是从不同的线程产生的,是否有可能在事件处理时 HttpContext 不为空,并且再次将错误的用户写入事件表?

4

2 回答 2

2

Httpcontext 是线程安全的,因此不会出现该实例的 http 上下文会意外更改的情况。它依赖线程上下文为特定用户返回正确的数据。

于 2013-11-08T13:00:17.330 回答
0

我做了类似的事情,但我检查以确保 HttpContext.CurrentUser 不为空。如果您在另一个 dll 中定义事件监听器,则前端可能是 Web 应用程序或本地 exe 或用于单元测试目的。在这种情况下 HttpContext.CurrentUser 将为空。

        if (HttpContext.Current != null)
            return HttpContext.Current.User.Identity.Name;

        return WindowsIdentity.GetCurrent().Name;
于 2013-11-12T18:17:16.293 回答