Jump to content

Oturum (Session) Sayısının açık olandan fazla olması


İbrahim TELCİ

Recommended Posts

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

Ç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

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...