[asp.net-mvc]HttpContext.Current.Items["value"] 不工作,因为 AngularJS 调用创建新的会话

发布时间: 2017/3/25 1:48:47
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我使用 C#,MVC 和 AngularJS。

我的问题是我 MVC 程序创建 HttpContext.Current.Items["value"] 和设置的值在初始的家庭控制器中,但当我 AngularJS 命中一个 ajax 调用的应用程序,它创建一个新的会话,我无法在早些时候提出的设置我 HttpContext.Current.Items["value"] 调用。

有做来解决这个问题吗?我想要继续使用 HttpContext.Current.Items["value"]

为什么我的 AngularJS 电话是否创建新会话? 会议是新的原因是因为他们有不同的 id,这在使用时︰

String strSessionId = HttpContext.Session.SessionID;

解决方法 1:

HttpContext.Current.Items一本字典为请求只缓存。尽快完成请求所有在它的值会超出范围。

// Will last until the end of the current request
HttpContext.Current.Items["key"] = value;

// When the request is finished, the value can no longer be retrieved
var value = HttpContext.Current.Items["key"];

HttpContext.Current.Session是存储请求之间的数据的字典。

// Will be stored until the user's session expires
HttpContext.Current.Session["key"] = value;

// You can retrieve the value again in the next request, 
// until the session times out.
var value = HttpContext.Current.Session["key"];

原因为什么你 HttpRequest.Current.Items 值不可用同样也是因为"在你回家的控制器",设置它是完全独立的要求,从你的 AJAX 调用。

会话状态依赖于 cookie,所以如果同一 cookie 发送回服务器,可以检索的数据存储在那里。幸运的是,如果你是在同一个域, AJAX 会自动发送到服务器的回 cookie

至于 SessionID 更改, ASP.NET 不会分配会议直到它用于存储。所以你需要显式存储的东西在会话状态中,实际上启动一个会话。请参阅MSDN 文章的详细信息。

官方微信
官方QQ群
31647020