2009-07-09 16 views
8

(daha bağlam için aşağıdaki soruya bakın):<machineKey decryptionKey = "AutoGenerate" ... IIS tarafından yok sayılıyor. önceki oturumun çerezleri geçersiz olmaz

web.config'de

<machineKey 
     validationKey="AutoGenerate,IsolateApps" 
     decryptionKey="AutoGenerate,IsolateApps"/> 

App yeni machineKey autogenerate için başarısız kaldığı herhangi durumlar var mı Havuz geri dönüşümü mü? Gördüğüm davranış budur ...

Bir MVC uygulamasında standart ASP.NET FormsAuthentication kullanıyorum. Bir kullanıcıyı FormsAuthentication.GetAuthCookie kullanarak oturum açıyor ve kalıcı bir tanımlama bilgisi kullanmıyorsam (yetkili durumumu hatırlamak için tarayıcının oturumuna bağlı olarak), oturumun bu çerez hakkındaki bilgisini geçersiz kılmak için IIS Uygulama Havuzu'nu geri dönüştürmeyi beklerim. kalıcı çerezleri olmayan tüm kullanıcıları kapat.

Bu DOES, IIS yüklemelerimden birinde (XP) gerçekleşir, ancak farklı bir IIS yapılandırmasında (Sunucu 2K3) FormsAuthentication tanımlama bilgisi (".ASPXAUTH" standart adı altında) geçerli kalır ve kullanıcıyı yetkilendirmeye devam eder.

Bunun neden olduğunu veya bu yapılandırmanın hangi yapılandırmayı denetlediğini bilen var mı?

Açıkçası, uygulama havuzunun geri dönüştürülmesinin, tarayıcının .ASPXAUTH çerezini (tarayıcımı kapatmadığım ve çerezin süresi dolmadığı sürece) göndermeye devam edip etmediği konusunda hiçbir kontrolü yoktur. IIS durumunda ben Application_BeginRequest olay sırasında Request.Cookies gelen çerez görebilirsiniz düzgün bir recycle sonra kimlik yalanladı yüklemek yılında

... ama Global.asax.cs mevcut sonraki olaya kontrol hamle kez (Application_AuthenticateRequest), çerez Request.Cookies koleksiyonu koleksiyonundan kaldırılmıştır.

Neden bu, hem IIS/ASP.NET yapılandırmaları için geçerli olmaz? Bu soruyu oluşturan daha basit bir yolu net değil durumda


: Ben Application_BeginRequest den Application_AuthenticateRequest için, tek bir istekle, adım ne zaman

Neden {System.Web.HttpCookie} den HttpContext.Current.Request.Cookies[".ASPXAUTH"] değişiklik null geliyor?


Daha ayıklama bilgisi:

Ben I önce talebi sırasında sonra global.asax.cs en FormsAuthentication_OnAuthenticate olayına aşağıdaki kodu ...

var cookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 
if (cookie != null) 
{ 
    var val = cookie.Value; 
    try 
    { 
     FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(val); 
    } 
    catch (Exception) 
    { 
    } 
} 

... eklerseniz IIS Uygulama Havuzu'nu geri dönüştürün, hiçbir özel durum yakalanmaz. IIS Uygulama Havuzu'nu geri dönüştürdükten sonra, aynı .ASPXAUTH çerezi tarayıcıdan gönderildiğinde, bir Şifreleme özel durumu yakalanır ("Dolgu geçersiz ve kaldırılamaz.")

Neden bu?

+1

Biri ASP'yi kullanmak üzere yapılandırılmış.NET State Service, oturumu prog yerine saklamak için mi? – devstuff

+0

İyi düşünce - hayır, ikisi de InProc'u maalesef kullanıyorlar. – kamens

cevap

-2

Form Kimlik Doğrulama çerezlerinin Oturum durumu ile ilgisi yoktur.

+0

1) Uygulama havuzunuzu geri dönüştürmek, oturumunuzu geri dönüştürür (InProc oturum yönetimini kullanıyorsanız) ve bu açıkça, * ASPXAUTH çerezini (BeginRequest olayından sonra kaldırıldığında görüldüğü gibi) işler. 2) Soruyu "tarayıcı oturumu" nu göstererek daha net hale getireceğim. createPersistentCookie Tipi: MS belgelerine System.Boolean (tarayıcı oturumları arasında kaydedilir bir) dayanıklı bir çerez oluşturmak true; aksi halde, yanlış. – kamens

+0

Anlamsız. Çerezler müşterilere aittir. Sunucuya yapabileceğiniz hiçbir şey istemcilerde saklanan çerezleri kaldıramaz. –

+0

Böyle düşünürdünüz değil mi? Çerez Application_BeginRequest tamamlanana kadar sunucudan kaldırılmıyor. Bu sesin ne kadar saçma olduğunu biliyorum, bu yüzden bu soruyu gönderiyorum. Bir hata ayıklayıcım var ve Application_BeginRequest'ten Application_AuthenticateRequest'e adım attığımda, HttpContext.Current.Request.Cookies [". ASPXAUTH"] değeri {System.Web.HttpCookie} değerinden null değerine değişiyor. – kamens

İlgili konular