首页 新闻 会员 周边

[赏金100元红包] asp.net MVC HttpContext.User as UserInfo 丢失问题

0
悬赏园豆:50 [已解决问题] 解决于 2016-05-18 21:09

远程调试方式 (加微信红包) 可追加

HttpContext.User as UserInfo 刷新几次,登录获取用户信息放入cache中,上线后,点击几次中间有偶尔几次 HttpContext.User as UserInfo结果为null

 

file:  Global.asax

protected void Application_PostAuthenticateRequest(object sender, EventArgs e)

        {

            try

            {

                var app = (HttpApplication)sender;

                if (!app.Context.User.Identity.IsAuthenticated) return;

                var user = _repository.FindCustomer(app.Context.User.Identity.Name, BasesController.System.AgentId);

                if (null == user) return;

                app.Context.User = user;

                Thread.CurrentPrincipal = user;

            }

            catch (Exception ex)

            {

                Logs.WriteLog(typeof(MvcApplication), ex);

            }

        }

游子善心的主页 游子善心 | 初学一级 | 园豆:73
提问于:2016-03-10 11:37
< >
分享
最佳答案
0

谢谢各位,是由于IIS的 账号权限问题。 对ASP.NET 瞬间无爱。 正式上线项目切记添加 IUSR账号,别问为什么,血的教训。

游子善心 | 初学一级 |园豆:73 | 2016-03-14 17:54

我怎么以前遇到这个问题时候好像不是 没有加IUSR 问题。

多罗贝勒 | 园豆:16 (初学一级) | 2016-03-21 11:31
其他回答(4)
0

你线上是不是有负载均衡?而且你HttpContext.User是如何从请求中获取的?

收获园豆:10
Daniel Cai | 园豆:10424 (专家六级) | 2016-03-10 11:46
0

web只是架在一个iis上吗?有没有做负载均衡?

收获园豆:10
MrNice | 园豆:3450 (老鸟四级) | 2016-03-10 11:50

你好

有一个nginx 做了 代理分发。单IIS运行也是有这个情况的。 具体情况参考上面兄弟我的回复。

谢谢

支持(0) 反对(0) 游子善心 | 园豆:73 (初学一级) | 2016-03-10 11:52
0

问题1: HttpContext.User as UserInfo 为null的时候 缓存里面还有没有值 

问题2:HttpContext.User as UserInfo 为null的时候 有没有执行以下代码

app.Context.User = user;

问题3:如果 app.Context.User = user; 每次都执行了 而后面 as又为空 那么需要验证 在这个过程中有没有 new一个新的httpcontext

ps:关于问题3 我这里就直接问了 你用了mvc的服务器端跳转没 我印象当中 mvc的服务器端跳转 会初始化一个新的httpcontext 导致前一个 httpcontext的值丢失 

ps:所以一般我的这钟生命周期级别的 变量 不放在httpcontext里 一般我都放在当前线程里面 threadstatic(好像叫这个)

问题4:后面你再调用的时候 是不是另起了一个线程 因为我记得 开新线程的话 httpcontext 会失效

收获园豆:10
小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2016-03-10 12:03

@游子善心: 通过threadid 来区分 当前请求前后关系 

支持(0) 反对(0) 小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2016-03-10 12:34

@游子善心: 多线程 并发这个级别的问题 要记录日志 不记录日志 神仙也救不了你

支持(0) 反对(0) 小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2016-03-10 18:06
0

把方法加上同步试试?  或者多部署到几台电脑上当服务器  然后再挂到nginx上 这样才算负载均衡

收获园豆:10
snowjake123 | 园豆:469 (菜鸟二级) | 2016-03-14 10:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册