İbrahim TELCİ Posted June 2, 2020 Share 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. Link to comment Share on other sites More sharing options...
Sherzod Posted June 2, 2020 Share Posted June 2, 2020 Merhaba, Do you use UniTimer? Link to comment Share on other sites More sharing options...
İbrahim TELCİ Posted June 2, 2020 Author Share Posted June 2, 2020 Evet kullanıyorum. Link to comment Share on other sites More sharing options...
Sherzod Posted June 2, 2020 Share Posted June 2, 2020 In this case, the session will not end. What is the interval? Link to comment Share on other sites More sharing options...
İbrahim TELCİ Posted June 2, 2020 Author Share 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? Link to comment Share on other sites More sharing options...
Administrators Farshad Mohajeri Posted June 2, 2020 Administrators Share Posted June 2, 2020 Quote Timeout sürem 30000 (30 sn.) Tam olarak hangi timeout? Tam adı nedir? Link to comment Share on other sites More sharing options...
İbrahim TELCİ Posted June 2, 2020 Author Share Posted June 2, 2020 2 hours ago, Farshad Mohajeri said: Tam olarak hangi timeout? Tam adı nedir? ServerModule üzerindeki SessionTimeout değeri. Link to comment Share on other sites More sharing options...
Administrators Farshad Mohajeri Posted June 2, 2020 Administrators Share Posted June 2, 2020 Eğer uniTimer varsa onlar sessioni canlı tutar. İstediğinizi yapmak için Session Idle Timeout demosuna bakın. Link to comment Share on other sites More sharing options...
İbrahim TELCİ Posted June 2, 2020 Author Share Posted June 2, 2020 ThreadTimer nesnesi kullanıyorum. Aynısı geçerlimi. "Unisession.terminate" oturumu tamamen kapatır mı? Link to comment Share on other sites More sharing options...
Administrators Farshad Mohajeri Posted June 2, 2020 Administrators Share Posted June 2, 2020 Bu sorunu basit bir projeye indirgimeniz mümkün mü? Link to comment Share on other sites More sharing options...
İbrahim TELCİ Posted June 3, 2020 Author Share 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. Link to comment Share on other sites More sharing options...
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now