2015-08-04 20 views
9

C#, MVC ve AngularJS kullanıyorum.HttpContext.Current.Items ["value"] işe yaramaz çünkü AngularJS çağrıları yeni oturumlar oluşturuyor

Sorunum, MVC programımın bir HttpContext.Current.Items["value"] oluşturduğu ve ilk ana denetleyicideki değeri ayarladığı, ancak AngularJS uygulamasının ajax çağrısı ile vurduğunda, yeni bir oturum oluşturduğunu ve değerin I değerini alamıyorum. daha önce HttpContext.Current.Items["value"] numaralı telefonumdan çağrı yap.

Bu sorunu gidermek için yapabileceğim bir şey var mı? HttpContext.Current.Items["value"]'u kullanmaya devam etmek istiyorum.

AngularJS çağrılarım neden yeni bir oturum oluşturur?

String strSessionId = HttpContext.Session.SessionID; 
+1

'HttpContext.Current.Items' kapsamı yalnızca geçerli istektir. – HashPsi

+0

, HttpContext.Current.Items kullanıcı oturumunda erişilememelidir. Sanırım benim problemim, angularjs çağrılarım yeni seanslar yaratıyor ve nedenini bilmiyorum. – Jim

cevap

13

HttpContext.Current.Items istek önbelleğe alma yalnızca bir sözlük: onlar farklı kimlikleri olur çünkü bu kullandığımda oturumları yeni olduğunu biliyorum nedenidir. İstek biter bitmez, içindeki tüm değerler kapsam dışı kalacaktır.

// 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 İstekler arasında veri depolayan bir sözlüktür. AJAX çağrısından tamamen ayrı bir taleptir, "ev kontrol cihazındaki" ayarlayarak çünkü

// 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"]; 

sizin HttpRequest.Current.Items değeri tekrar kullanılamaz nedeni budur.

Oturum durumu bir tanımlama bilgisine bağlıdır, bu nedenle aynı tanımlama bilgisi sunucuya geri gönderilirse, orada depolanan veriler alınabilir. Neyse ki, aynı alanda iseniz, AJAX will automatically send the cookie back to the server.

SessionID değiştiğinde, ASP.NET does not allocate storage for session until it is used. Bu nedenle, bir oturum başlatmak için oturum durumunu açık bir şekilde saklamanız gerekir. Daha fazla bilgi için bkz. this MSDN article.

İlgili konular