İbrahim TELCİ Posted June 2, 2020 Posted June 2, 2020 Merhabalar. Uygulamamda aktif olarak 120 açık oturum var. Timeout sürem 30000 (30 sn.) yalnız açık oturum sayısı 172 görünüyor 24 saatlik kullanım sonucu şu an durum bu. Sayfa yenilense veya kapatılsa açık oturumun 30 sn sonra düşmesi gerek ama neden olduğunu anlayamadım. Bunlar üzerinde timer olan bilgilendirme ekranları olarak kullanılıyor. Herhangibir kullanıcı etkileşimi yok. Server module üzerinde bir UniThreadTimer var veritabanının kontrol ederek değişiklik olan sessiona veri gönderiyor.Session üzerindeki bir timerda bu değişikliği takip ediyorç Çalışma mantığı bu. Oturumların kilitli kalma durumu olabilir mi? IIS üzerinden dll olarak yayınladım. Quote
Sherzod Posted June 2, 2020 Posted June 2, 2020 In this case, the session will not end. What is the interval? Quote
İbrahim TELCİ Posted June 2, 2020 Author Posted June 2, 2020 1 2 minutes ago, Sherzod said: Bu durumda, oturum sona ermeyecektir. Aralık nedir? Timer interval 1 saniye olarak ayarlı. Yalnız tarayıcıyı yenilediğimde veya kapattığımda oturumun timeout süresi dolunca kapanması gerekmez mi? Quote
Administrators Farshad Mohajeri Posted June 2, 2020 Administrators Posted June 2, 2020 Quote Timeout sürem 30000 (30 sn.) Tam olarak hangi timeout? Tam adı nedir? Quote
İbrahim TELCİ Posted June 2, 2020 Author Posted June 2, 2020 2 hours ago, Farshad Mohajeri said: Tam olarak hangi timeout? Tam adı nedir? ServerModule üzerindeki SessionTimeout değeri. Quote
Administrators Farshad Mohajeri Posted June 2, 2020 Administrators Posted June 2, 2020 Eğer uniTimer varsa onlar sessioni canlı tutar. İstediğinizi yapmak için Session Idle Timeout demosuna bakın. Quote
İbrahim TELCİ Posted June 2, 2020 Author Posted June 2, 2020 ThreadTimer nesnesi kullanıyorum. Aynısı geçerlimi. "Unisession.terminate" oturumu tamamen kapatır mı? Quote
Administrators Farshad Mohajeri Posted June 2, 2020 Administrators Posted June 2, 2020 Bu sorunu basit bir projeye indirgimeniz mümkün mü? Quote
İbrahim TELCİ Posted June 3, 2020 Author Posted June 3, 2020 Çok garip bir durum ServerModule üzerinde çalışan bir Threadtimer içinde oturumların listesini alıp veritabanında değişiklik olan oturumlara güncelle diye bir değişkeni tetikliyorum. S := UniServerModule.SessionManager.Sessions; // YENİ ÇAĞRI LİSTESİNİ DÖNGÜYE SOK while not Q_Yeni_Cagri.Eof do Begin //UniServerModule.Logger.AddLog('YENİ ÇAĞRI VAR ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: '); // eğer yeni çağrı bulunur ise aktif sessionların listesini al //S.Lock; try //Aktif_Sessions.Filtered:=false; //Aktif_Sessions.EmptyDataSet; // SESSİON SAYISI KADAR DÖN TÜM SESSİONLARI DATA SETE AT for I := 0 to S.SessionList.Count - 1 do begin U := S.SessionList[I]; if ((U.UniMainModule as TM_Module).EKRAN_ID<>'Close') AND ((U.UniMainModule as TM_Module).EKRAN_ID=Q_Yeni_Cagri.FieldByName('EKRAN_ID').AsString) then Begin (U.UniMainModule as TM_Module).CAGRI_ID:=Q_Yeni_Cagri.FieldByName('CAGRI_ID').AsInteger ; End ; end; finally //S.Unlock; // ... and finally don't forget to release lock! //UniServerModule.Logger.AddLog('1-Oturum listesi alındı.' ); end; Q_Yeni_Cagri.next; End; Bu şekilde timeouta düşen oturumlar kapanıyor. Ama yukarıdaki gibi oturumdaki değişkeni U:=UniServerModule.GetSession(Aktif_Sessions.FieldByName('SESSION_ID').AsString); (U.UniMainModule as TM_Module).CAGRI_ID:=Q_Yeni_Cagri.FieldByName('CAGRI_ID').AsInteger; bu şekilde aktarınca. Oturumu "Uniapplication.terminate" yapsam bile sürekli açık kalıyor. Şimdilik böyle çözdüm. İşin aslınıda çözemedim. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.