5

benim web sayfaları AJAX kullanarak kimlik doğrulama bilet sona erme tarih/saat için sunucuyu kontrol edebilirsiniz Bir Web Uygulaması Projesi uygulamaya çalışıyorum.Kontrol kimlik doğrulama bilet sona erme o

Ben slidingExpiration ile Form kimlik doğrulaması kullanıyorum.

rastlamak sorun bunu sıfırlamadan değerini kontrol anlamaya olamaz. CheckExpiration.aspx - - Basit bir sayfa oluşturdu aşağıda arkasında kod şudur:

private class AjaxResponse 
    { 
    public bool success; 
    public string message; 
    public string expirationDateTime; 
    public string secondsRemaining; 
    public string issueDate; 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    AjaxResponse ar = new AjaxResponse(); 
    JavaScriptSerializer js = new JavaScriptSerializer(); 

    if (HttpContext.Current.User.Identity.IsAuthenticated) 
    { 
     FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity; 
     string expiration = id.Ticket.Expiration.ToString(); 

     TimeSpan timeRemaining = id.Ticket.Expiration - DateTime.Now; 

     ar.success = true; 
     ar.expirationDateTime = expiration; 
     ar.issueDate = id.Ticket.IssueDate.ToString(); 
     ar.secondsRemaining = timeRemaining.Minutes.ToString() + ":" + timeRemaining.Seconds.ToString(); 
    } 
    else 
    { 
     ar.success = false; 
     ar.message = "User not authenticated"; 
    } 

    string output = js.Serialize(ar); 
    Response.Write(js.Serialize(ar)); 

    } 

Ben ajax her saniye kullanarak benim uygulamada Usta sayfasından bu sayfayı diyoruz. Kimlik doğrulama süresinin sona ermesinden sonra, son kullanma tarihi sıfırlanır.

Bu davranışı nasıl önleyebilirim? Talebin başlığında yapabileceğim bir şey var mı?

+0

onay bu o benzer bir şeydir veya konudur fark ... http: //www.dotnetmonster.com/Uwe/Forum.aspx/asp-net-security/2316/problem-with-slidingExpiration – Scorpio

+0

Bağlantı kurduğunuz bu iletinin, .net varsayılan davranışıyla ilgili sorunları olduğunu düşünüyorum. Bu davranışı umursamıyorum çünkü boşta kalırsanız, bir şeyler yapmaya çalışana kadar sunucu düzeyinde oturum açtığınızı bilmezsiniz. Daha fazla kullanıcı dostu bir şey yapmaya çalışıyorum, buradan çıkış yapmak üzere olduğunuzu öğreneceksiniz. Ayrıca, kimlik doğrulaması başka bir sekmeden yenilenebileceğinden, yalnızca bir sayfa girildiğinde ayarlanmış bir javascript zamanlayıcıya güvenmek istemiyorum. –

cevap

0

Neden kendinizi hesaplamak bir oturum değişkeni olarak sona erme saklamıyoruz? Sadece bir kez id.Ticket.Expiration değerini almanız gerekir. Sonra her çağrı, sunucudan değeri alın ve buna göre artırın ve sunucuya geri depolayın.

http://msdn.microsoft.com/en-us/library/ms178581%28v=vs.85%29.aspx

yalancı kod:

if(!Session.KeyExists("Expiration")) 
{ 
    Session["Expiration"] = id.Ticket.Expiration; 
} 

Session["TimeRemaining"] = Session["Expiration"] - DateTime.Now; 

// get all ajaxy here 
0

kendi uygulamasında CheckExpiration.aspx sayfa yerleştir ve ana uygulamanın altında bir sanal dizin olarak bu dağıtın. Bu sanal dizinde, slidingExpiration = false öğesini yapılandırın. Kodunuz olduğu gibi çalışacaktır, ancak son kullanma tarihine kadar geçen sürenin yarısına geldiğinde bileti yeniden oluşturmayacaktır. İşte

Ben çalıştığını doğrulamak için hızlı bir yerel projede did:
    1. yeni bir web uygulaması AuthTest4 düzenlendi ve yoldaki yerel IIS sunucusunu kullanacak şekilde yapılandırır/AuthTest4
    2. IIS içine gitti ve tüm AutoGenerate/Isolate seçeneklerinin işaretini kaldırmak ve kendi MachineKey'ini oluşturmak için/AuthTest4 için Machine Key ayarını değiştirdi.
    3. boş web uygulaması ExpCheck düzenlendi ve
    4. ExpCheck uygulamasının web.config olması Modifiye/AuthTest4/ExpCheck sanal dizinde yerel IIS kullanmak İçinde
    5. Yapılandırılan ExpCheck web uygulaması sizin CheckExpiration.aspx kodu koymak tek bölümü

    ExpCheck web.config'de aşağıda gösterildiği gibi. Diğer tüm güvenlik ayarları ana sanal dizinden aşağı doğru basamaklanır.

    <system.web> 
        <authentication mode="Forms"> 
        <forms slidingExpiration="false" /> 
        </authentication> 
    </system.web> 
    
  • İlgili konular