SessionState timeout değerini görmüyor.

thunderhawk (8) 7 yıl önce sordu

Merhaba. Bir sorunum var. Admin paneli de olan bir Web projesinde çalışıyorum. Admin Web Config dosyasına yazdığım sessionState timeout değerini sistem algılamyor. Örneğin 20 dakika verdiğimde kullanıcı Admin panelinde ürün eklerken 5-6 dakika bilgisayar başından ayrılıp geri döndüğünde işini bitirip kaydet tuşuna basınca ana sayfaya atıyor. Yani kaydetmiyor. Bir bakar mısınız? Web Config kodları aşağıdadır:

<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <system.web>
    <!--<sessionState mode="Off"/>-->
    <customErrors mode="RemoteOnly" defaultRedirect="/tr/Anasayfa">
      <error statusCode="404" redirect="/404"/>
      <error statusCode="500" redirect="/500"/>
    </customErrors>
    <!--<customErrors mode="Off" />-->
    <pages enableViewState="false" validateRequest="false">
      <controls>
        <add tagPrefix="ajaxToolkit" assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" />
      </controls>
    </pages>
    <compilation debug="true" targetFramework="4.5">
      <assemblies>
        <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A" />
      </assemblies>
    </compilation>
    <httpRuntime targetFramework="4.5" executionTimeout="3600" maxRequestLength="250000" requestValidationMode="2.0" />
    <sessionState timeout="20"/>
  </system.web>
  <system.serviceModel>
    <bindings />
    <client />
  </system.serviceModel>
  <system.webServer>
    <staticContent>
      <remove fileExtension=".woff" />
      <mimeMap fileExtension=".woff" mimeType="application/font-woff" />
      <remove fileExtension=".woff2" />
      <mimeMap fileExtension=".woff2" mimeType="font/x-woff" />
    </staticContent>
    <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="2000000000" maxQueryString="2048" maxUrl="4096" />
      </requestFiltering>
    </security>
  </system.webServer>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>

Aşağıda da Code Behind kısmında yazdıklarım. Her sayfa için bunun benzerini yapıyorum. Örneğin ana sayfa:

if (Session["User"] != null)
            {
                Session["CurrentPage"] = "Anasayfa";
                string language = Session["Culture"].ToString();
                if (!Page.IsPostBack)
                {

                }//if 
            }//if
            else
            {
                HttpCookie currentPage = new HttpCookie("CurrentPage");
                currentPage.Values.Add("Page", "Anasayfa");
                currentPage.Expires.AddMinutes(20);
                Response.Cookies.Add(currentPage);

                if (Request.Cookies["LockScreen"] != null)
                {
                    Response.Redirect("/" + Application["DefaultPrefix"].ToString() + "/Kilit-Ekrani");
                }
                else
                {
                    Response.Redirect("/" + Application["DefaultPrefix"].ToString() + "/Uye-Girisi");
                }
            }//else

alattin 7 yıl önce

Soruna cevabım geliyor. Birazdan

Toplam 1 cevap


alattin (16999) 7 yıl önce cevapladı

İki tane kavram var. Bir Application Pool sesion timeout, diğeri web sitesi session timeout.

Web sunucun üzerindeki, web sitenin çalıştığı Application Pool (IIS application pool nedir?) Session Timeout süresi, senin web.config üzerinden sessionState timeout="20" ile belirlediğin değerden büyük değilse yazdığın ifade geçersiz olur.

Yani eğer senin web sunucundaki IIS içinde, uygulamanın bağlı olduğu Application Pool timeout süresi 10dk ise senin verdiğin 20dk geçersiz olur.

Eğer web sunucuna ya da paneline erişimin varsa,  Application Pool için  Session Timeout süresini yükseltmelisin. Örneğin sunucu üzerinde timeout süresini 60 yaparsan uygulamanda, web.config üzerinden  sessionState timeout="50" yaparsan bu artık geçerli olacaktır.

Forms authentication kullanıyorsan, kullanıyorsan, timeout süresini aşağıdaki şekilde uzatabilirsin.

Session["User"] != null gibi değerleri Sessionda saklamana gerek kalmaz. User.Identity.IsAuthenticated şeklinde kontrollerini yapabilirsin.

 <authentication mode="Forms">
  <forms loginUrl="~/signout.aspx" timeout="40" />
</authentication>

thunderhawk 7 yıl önce

Çok teşekkürler. Server'a eposta gönderdim. Süreyi uzattılar. Sonuç olarak sorun çözüldü. Yalnız Session kullanman gerek yok demiştin. Güvenlik dışında, ben en onu kullanarak sistemin dil ayarını da değiştiriyorum. Öncesinde Application kullanıyordum. Bu da tabi aynı anda girilince verileri karıştırdı. Sonra Session'a döndüm. Dil paketlerini XML verilerden yararlanarak çekiyordum. Fakat XML bazen ön yüklenme hatası vermeye başladı. Site açılmadan önce onları yüklediğim için site açılmamaya başladı. Ben de farklı bir katmandan Dll olarak çekmeye başladım. Tabi yine XMl'e döneceğim. Fakat Json'ı da düşünüyorum. Sayfayla beraber asenkron olarak getirmeye çalışacağım. Örneğin dilini değiştirmek için Code Behind'a yazdığım bir metotla ön taraf arasında "<%: DilGetir("Baslik", Session["Language"].ToString())%>" gibi bir bağıntıyla dili tercüme ediyorum. Bildiğin başka bir alternatif var mıdır? Yoksa canın sağolsun.

alattin 7 yıl önce

Resource kullanarak dil olayını çözebilirsin. "asp.net globalization and localization" diye aratırsan pek çok kaynağa ulaşabilirsin.

alattin 7 yıl önce

Cevabımın yanındaki "Cevap olarak kabul et" simgesini tıklayarak soruyu kapatabilirsin.

thunderhawk 7 yıl önce

Onu önce düşündüm. Fakat büyük çapta bir projeyi kaldıracağı konusunda endişelerim oldu. İlk yaptığım proje çok büyük bir site. 10000 satıra yakın dil paketi yükledim. Üstelik bu daha admin içindi. Bir de Demo'ya yaptım aynısını. Resource'a bakınca belirli bir kısıtlaması varmış. Ayrıca dil paketlerini müşteriye verip bu işi daha pratik yapmak istedim. Xml'ler hazırladım. Onlar gerekli doldurmaları yapınca benim sadece Xml dosyasının adını değiştirmem yetti. Yani en-us.xml, tr-tr.xml gibi. Fakat onun da ön yükleme sorunu çıktı. Ama ben önce sayfayı yükleyip sonra xml ya da json olarak dil paketlerini getirtmek istiyorum. Hatta asenkron programlamayı da düşünüyorum. Tek istediğim dil paketlerini getirme yolunun, büyük bir projeyi kaldırması ve kullanıcıyla etkileşimli olmasıdır. Ayrıca ilerde onun kontrolünü sadece Admin panele bırakmak istiyorum.

thunderhawk 7 yıl önce

Bundan sonra soruyu kapatayım. Seni de fazla meşgul etmeyeyim. Çok sağol.