2011-12-17 25 views
8

Aşağıdaki özel SQL sunucusunu kullanmak için sessionState öğesini yapılandırdım ve 1 dakika sonra sona erecek şekilde ayarladım. Oturum her zaman tarayıcıda ve sql sunucusunda kalıyor gibi görünüyor. RegenerateExpiredSessionId öğesini yanlış olarak ve aynı soruna sahip olarak bile ayarladım. IIS 7 windows 7 pro altında asp.net 4.0 çalıştırıyorum.ASP.NET sessionState SQLServer modu zaman aşımı çalışmaz

ben sessionstate veritabanında tablo ASPStateTempSessions kontrol ve içindeki kayıtları gördüm ettik

<sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnectionString="Data Source=MYCON\SQL2008REXPRESS;Initial Catalog=DBASPState; User ID=DB1543Write;Password=test" timeout="1" sqlCommandTimeout="10" regenerateExpiredSessionId="false" stateNetworkTimeout="10" compressionEnabled="true" cookieless="false" /> 

Benim web.config yapılandırması. Okuma ve yazma, sahibi izni, bu veritabanının eş zamanlı kullanıcısı ile yapılandırılmış halidir. "Even Viewer" dan hata yok.

ASPStateTempSessions tablosundaki değeri kontrol ettim ve aşağıda 1 saat karşılaştırmak için 5 saatle kıyaslandığında oturum kapalı gibi görünüyor. Asp.net, geçerli makine saat dilimi yerine başka bir zaman dilimini kullanarak 1 dakika içinde süresi dolmak üzere yapılandırılmış gibi görünüyor. 29: 01,677 sona eriyor (sütun) 2011-12-17 17:30

Benim şimdiki zaman 2011/12/17 11:29 Veritabanı sütunları (sütun) 2011-12-17 17 değer CreatedDate buydu : 03.903

Veritabanı değeri hakkındaki tüm detaylar aşağıdadır. Benim tarayıcısında "Yenile" düğmesine basıldığında sonra ben ilk Web sitem

SessionId, Created, Expires, LockDate, LockDateLocal, LockCookie, Timeout, Locked, SessionItemShort, SessionItemLong, Flags 
0wtp4j0traj5e0gydygkyoe22476b033 2011-12-17 17:29:01.677 2011-12-17 17:30:03.903 2011-12-17 17:29:03.873 2011-12-17 11:29:03.873 11 1 False <Binary data> NULL 0 

ziyaret ettiğinizde

ilk kaydıdır, rekor yeni süresi dolan süre ile güncellendi ama oturum bilgileri hala orada oldu

0wtp4j0traj5e0gydygkyoe22476b033 2011-12-17 17:29:01.677 2011-12-17 17:37:08.910 2011-12-17 17:36:08.907 2011-12-17 11:36:08.907 13 1 False <Binary data> NULL 0 

Herhangi bir fikir?

cevap

11

Son kullanma tarihi UTC'dir.

SQL oturumları süresi dolduğunda, hemen oturum tablosundan kaldırılmaz ve bir Session_End olayı alırsınız.

SQL oturum sağlayıcısı, oturum tablosundaki Expires sütununu aktif olarak izlemez. Bunun yerine, oturumlar, silinmeden DeleteExpiredSessions saklı yordamını çağıran bir SQL Aracısı işiyle gerçekleştirilinceye kadar "resmi olarak" sona ermez. Varsayılan olarak, iş her 60 saniyede bir çalışacak şekilde yapılandırılmıştır. Tabii ki, bu, SQL Agent'ın oturum süresinin sona ermesi için çalışmasının gerektiği anlamına gelir. Aynı zamanda, "gerçek" sona ermeden önce "nominal" son kullanımdan sonra en az 60 saniye beklemeniz gerektiği anlamına gelir.

Gerekirse, ekspirasyonları SP'yi kendiniz arayarak zorlayabilirsiniz.

+0

@JamesSmith Bu gerçekten sizin için çalışıyor mu? Aynı problemle karşılaşıyorum ama oturumu masadan sildikten sonra hala çıkış yapmıyor. Bir fikrin var mı? – jkyadav