Web.config'de oturum zaman aşımı nasıl ayarlanır


179

Çok zor denedim ama bir ASP.Net web uygulaması için işlem içi oturum için oturum zaman aşımı değeri ayarlamak nasıl bir çözüm bulamıyorum.

VSTS 2008 + .Net 3.5 + C # kullanıyorum. Zaman aşımı süresini 1 dakika olarak ayarlamak için kendim yazdım, doğru mu?

Yazarken system.web bölümü altında yazdım. web.config

<sessionState timeout="1" mode="InProc" />

5
Zaman aşımını tanımlama şekliniz doğrudur. Bununla ilgili herhangi bir sorunun var mı?
Darin Dimitrov

7
Bunun, başlangıçtan 1 dakika sonra değil, 1 dakika işlem yapılmadığı zaman sona ereceği anlamına geldiğini biliyor musunuz? Benim tahminim, bu soruyu soruyorsanız ve zaman aşımını doğru yazdıysanız, nasıl çalıştığına dair yanıltıcı olabilirsiniz.
Ivan Zlatanov

1
Etkin olmayan zamanı ayarlamam gerekiyor, sadece ihtiyacım olan şey bu. Teşekkürler Ivan!
George2

LOL! Ben sadece 1 dakika zaman aşımı ayar tavsiye etmem. Bu kullanılabilirliği öldürecek!
Brian McCarthy

3
Kısa bir zaman aşımı süresi ihtiyacını tamamen anlıyorum. Benim durumumda, oturum zaman aşımına uğradığında sitenin kullanılabilirliğini ve kullanıcı geri döndüğünde nasıl tepki verdiğini test etmektir. Oturum zaman aşımı hızlı bir şekilde gerçekleşmedikçe hata ayıklama yaparken de test etmek zor
Brett Weber

Yanıtlar:


323

Zaman aşımını 20 dakikaya ayarlamak istiyorsanız, şöyle bir şey kullanın:

    <configuration>
      <system.web>
         <sessionState timeout="20"></sessionState>
      </system.web>
    </configuration>

16
20 dakika veya saat? (zaman aşımı = "20")
Muhammed Awais

21
Config, zaman aşımını dakika
cinsinden

50

İçinde ayarlıyorsunuz değer timeoutözniteliği oturum zaman aşımı değerini ayarlamak için doğru yollardan biridir.

Bu timeoutözellik, bir oturumun terk edilmeden önce ne kadar süre boşta kalabileceğini belirtir. Bu özellik için varsayılan değer 20'dir.

Bu özelliğe 1 değeri atayarak, oturumu boşta kaldıktan sonra 1 dakika içinde terk edilecek şekilde ayarladınız.

Bunu test etmek için basit bir aspx sayfası oluşturun ve bu kodu Page_Load olayına yazın,

Response.Write(Session.SessionID);

Bir tarayıcı açın ve bu sayfaya gidin. Bir oturum kimliği yazdırılacaktır. Bir dakika geçmesini bekleyin, ardından yenile düğmesine basın. Oturum kimliği değişecektir.

Şimdi, tahminim doğruysa, oturumun süresi dolduğunda kullanıcılarınızın oturumlarını kapatmasını istersiniz. Bunu yapmak için, kullanıcı kimlik bilgilerini doğrulayacak bir giriş sayfası oluşturabilir ve bunun gibi bir oturum değişkeni oluşturabilirsiniz.

Session["UserId"] = 1;

Şimdi, bu değişken için her sayfada böyle bir kontrol yapmanız gerekecek -

if(Session["UserId"] == null)
    Response.Redirect("login.aspx");

Bu, nasıl çalışacağına dair çıplak kemiklere bir örnektir.

Ancak, üretim kalitenizi güvenli uygulamalar yapmak için ASP.NET tarafından sağlanan Roller ve Üyelik sınıflarını kullanın . Kullanmaya çalıştığınız normal Oturum tabanlı kimlik doğrulamasından çok daha güvenilir olan Form tabanlı kimlik doğrulaması sağlarlar.


Büyük tavsiye ... Response.Write (Session.SessionID) ile test etmeden önce bir Oturum değişkeni ayarladığınızdan emin olun; aksi takdirde her yenilediğinizde yeni bir kimlikle yenilenir.
Chris Catignani

1

MVC kullanıyorsanız, bunu Views dizinindeki web.config dosyasına değil, web uygulamasının Kök dizinindeki web.config dosyasına koyarsınız. Ayrıca, George2'nin sorusunda belirttiği gibi, system.web düğümünde olması gerekiyor: "Web.config'de system.web bölümünde yazdım"

Zaman aşımı parametre değeri dakikayı temsil eder.

SessionState öğesinde ayarlanabilecek başka özellikler de vardır. Bilgileri burada bulabilirsiniz: docs.microsoft.com sessionState

<configuration>
   <system.web>
      <sessionState timeout="20"></sessionState>
   </system.web>
</configuration>

Daha sonra, aşağıdaki yöntemi ekleyerek Global.asax dosyasında yeni bir oturumun başlangıcını yakalayabilirsiniz:

void Session_Start(object sender, EventArgs e)
{
    if (Session.IsNewSession)
    {
        //do things that need to happen
        //when a new session starts.
    }
}

0

Bunu şu dillerde kullanın web.config:

<sessionState 

  timeout="20" 
/>

30
Listelediğiniz özelliklerin çoğuna ihtiyacınız yok, sadece timeoutgerçekten. stateConnectionStringve sqlConnectionStringne zaman göz ardı edilir mode="InProc"ve değerleri modeve cookielessvarsayılan değerlerine ayarlanır. Yani, bu gerçekten Wolfwyrd'ın cevabına damıtıyor.
arcain

0

Çalışmıyorsa web.config, IIS'den ayarlamanız gerekir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.