»
günün sorusu: browser penceresi kapandığın anda session'ı nasıl bitirebiliriz?
|
| ://www Web tasarımı ve internet ile ilgili olarak karşılaştığınız problemleri ve merak ettiklerinizi burada tartışabilirsiniz. |
![]() |
|
|
LinkBack | Seçenekler |
|
|
#1 (permalink) |
|
Üyelik Tarihi: 20.06.2002
Yer: Istanbul
Yaş: 19
Mesaj: 641
|
günün sorusu: browser penceresi kapandığın anda session'ı nasıl bitirebiliriz?
merhaba, çok klişe bir problemdir session ile uğraşmak, session'ları zamanında bitirememek ve sitedeki aktif ziyaretçi sayısının patlaması vb. benim sormak istediğim soru ise şu: belki üç-dört sene öncesi teknolojisi buna izin vermiyordu. ancak browser penceresi kapandığında server-side bir sayfa çağırılıp session'ı bitirebilir mi? veya böyle bir soruna siz nasıl çözüm getirirsiniz? (örnek kod olarak değil de algoritma olarak da cevaplayabilirsiniz) not: her yol/teknoloji mübah, (js, ajax, ASP.net, PHP vb.) ancak popup vb. kullanmak yok. selamlar
__________________
bu imzayı okurken ortalama iki - üç saniye kaybettiğinizin farkındamısınız? |
|
|
|
|
|
#2 (permalink) |
|
Üyelik Tarihi: 02.08.2001
Yer: istanbul
Yaş: 38
Mesaj: 1,542
|
Re: günün sorusu: browser penceresi kapandığın anda session'ı nasıl bitirebiliriz?
http'nin sessionless bir protokol olmasından dolayı bu doğrudan mümkün değil; böyle bir sorunun çözümü sadece periyodik olarak session'ları kontrol etmek ve ayrılmış olanları remove etmektir. standart değerlerle 15 dakika'da session kendi kendine timeout verir; yani hala bağlantı var mı kontrol edilir ve yoksa o session yok edilir. bu değer IIS'de de Apache'de de değiştirilebilir. Ama çok düşük bir değer, hafızanın şişmesine sebebiyet verir. DAha akılcı bir çözüm, her sayfada bunları kontrol etmek ve ona göre davranmaktır.
pencere kapandığı için pencereye bağlı scripting'ler (js) de hafızadan silineceğinden istesen de server'a hber ulaştıramazsın. en fazla kapanma işleminde bir uyarı, ya da senin istemediğin şekilde bir pencere açarsın. hoş; bu pencereyi negatif değerlerle açabilirsen (bazı popup'ların kullandığı taktik) ekranda gözükmez ve o da çağıracağı ufak scriptle ayrılışı server'a bildirebilirsin... ama popup oluyor yine de ortada, gözükmese de. |
|
|
|
|
|
#3 (permalink) |
|
Üyelik Tarihi: 25.08.2001
Yer: Antalya
Yaş: 27
Mesaj: 970
|
Re: günün sorusu: browser penceresi kapandığın anda session'ı nasıl bitirebiliriz?
bildiğim kadarıyla session oluştururken herhangi bir süre belirlenmezse ömrü "browser kapanana kadar" dır...
Saygılarımla
__________________
Take me back to my boat on the river and I won't cry out any more |
|
|
|
|
|
#4 (permalink) |
|
Üyelik Tarihi: 22.04.2003
Yer: İstanbul
Yaş: 26
Mesaj: 112
|
Re: günün sorusu: browser penceresi kapandığın anda session'ı nasıl bitirebiliriz?
Bilmiyorum doğru bir yaklaşım olacak mıdır ancak, JavaScript ile pencere kapandığında browser de yer alan session id lerini alarak xmlhttp tarzı bir obje ile web sitenin session kontrolü yapacak (mesela ASP) bir ASP dosyasına gönderebilirsin.Eğer aktif sessionları bir veritabanında tutuyorsan veritabanından, JavaScript yolu ile gelen session id yi silebilirsin. Tabii bu sadece teorik. Ama;
1 - JavaScript ile pencerenin kapandığını anlayabiliyoruz (her browserda çalışmayabilir tabii) 2 - JavaScript ile session cookielerine ulaşabiliyoruz 3 - JavaScript ile xmlhttp objesini kullanarak bir sayfaya erişebiliyoruz. 4 - Session ID leri server tarafından okuyabiliyor ve veritabanına kaydedebiliyoruz. Bunları düşünce mantıklı bir teori gibi geliyor ![]() Kolay gelsin. |
|
|
|
|
|
#5 (permalink) |
|
Üyelik Tarihi: 09.12.2000
Yer: istanbul
Yaş: 30
Mesaj: 1,947
|
Re: günün sorusu: browser penceresi kapandığın anda session'ı nasıl bitirebiliriz?
@Scud; session default olarak bir browserdaki son aktivite + session timeout süresi kadardır.
ana soruya gelince <body onBeforeUnload="closeThisSession();" şeklinde bir event tetiklenebilir. bu durumda closeThisSession fonksiyonu içerisinde xmlhttp ile çağrılan sayfa aracılığı ile bu session abandon edilerek bitirilebilir. yalnız dikkat edilmesi gereken, session abandon edilse de session değişkenler hala değer taşır. bunların da null yapılmasında fayda var. gerçi browser kapatıldığı için geri dönüş olmayacağından gereksiz görünebilir ama yapmakta fayda var. ![]() JavaScript ile cookileri silmek server-side için herhangi bir etkileşim sunmaz. sadece bir sonraki ziyaret için kontrolde faydalı olur.
__________________
"oturduğum mahallenin yolları çamurluydu, boyalı ayakkabı giysem bile, o yollardan geçtikten sonra çamurlanmamaları mümkün değildi. hayatım da böyle." yılmaz güney http://www.sipidik.com |
|
|
|
|
|
#6 (permalink) |
|
Üyelik Tarihi: 13.07.2000
Yer: LND
Mesaj: 4,279
|
Re: günün sorusu: browser penceresi kapandığın anda session'ı nasıl bitirebiliriz?
"Browser kapanınca" session uçar ancak eğer başka browser "penceresi" açıksa uçmaz.
Yani kilit nokta; "Iexplore.exe" kapanınca session uçar (buradaki uçardan kasıt adamın bir daha o siteyi açtığında aynı sessiondan devam edemeyeceği, yoksa serverside olarak bize bu bilgi gelmez - o yüzden timeout var) ancak Iexplore.exe değil de sadece bir pencere kapatılırsa o zaman session uçmaz yeni bir pencere açılıp site yazıldığında aynı sessiondan devam edebilecektir. işin pratiğinde de @absconder dediği yol gayet verimli ancak unutulmaması gereken bir şey var ki bu genelde yanlış bir web uygulaması tasarımı sorunudur ![]() Yani programlama yaparken "Goto" kullanmaya benzer bunu yapmak gerçekten iyi bir neden olması gerektiğini düşünüyorum.
__________________
FERRUH.MAVİTUNA - İnanmıyorum, yeni site! |
|
|
|
|
|
#7 (permalink) | |
|
Üyelik Tarihi: 20.06.2002
Yer: Istanbul
Yaş: 19
Mesaj: 641
|
Re: günün sorusu: browser penceresi kapandığın anda session'ı nasıl bitirebiliriz?
merhaba,
nedeni sadece merak. ne merakı derseniz uygulamayı gezen insanların kaç dakika/saniye durduklarını merak ediyorum. bir sayaç uygulamasında sistemi ziyaret edenlerin gezinme aralığı diye bir bölüm vardı. (5dk. az, 5dk. - 10dk. vb.) oradan ilham alarak bu soruyu sormuştum. absconder'ın dediği fonksiyonu son dönemlerin meşhur duryası ajaxlarda kullanılan xmlhttp objesi ile bir sayfaya ulaşarak oturumu kapatmayı en matıklı yol olarak gordum.** bir de bu mesajları okumadan önce aklıma gelen bir yontem vardı. o da session.timeout = 1; olarak belirlenip js sayesinde (xmlhttp) her dakika sonunda session'ı bir daha 1 dakika canlı tutmayı düşünmüştüm. tabii ki server load hakkında sorulacak sorulara kulaklarımı tıkayacaktım. ![]() Alıntı:
** not: yukarıda belirttiğim yolu denemedim. en kısa sürede deneyeceğim. şu durumda en mantıklısı absconder'ın belirttiği yol gözüküyor.
__________________
bu imzayı okurken ortalama iki - üç saniye kaybettiğinizin farkındamısınız? |
|
|
|
|
|
|
#8 (permalink) |
|
Üyelik Tarihi: 09.12.2000
Yer: istanbul
Yaş: 30
Mesaj: 1,947
|
Re: günün sorusu: browser penceresi kapandığın anda session'ı nasıl bitirebiliriz?
@bérk, sorulması gereken soru neden bu kadar aciliyetle session'ın bitirilmesini istiyorsun? default süre sonra server kendilikten session'ı silecek. e zaten pencere de kapandığı için yeni bir pencere açılsa dahi aynı session ID'ye erişilemeyecek.
burada bir istisna var, eğer pencere bir popup açmışsa (aynı şey Ctrl + N ile açılan pencere için de geçerlidir) session bitmeyecektir. şayet istek bunun için ise bahsettiğim yöntem işe yarayacaktır. (mesela, ana pencere kapandığında popup işlevsiz kalsın benzeri bir uygulamada talebin oldukça makul.) eğer yukarıda bahsettiğim dışında bir uygulama ise (başka bir durum var ise bilemem) @soul'un bahsettiği tasarım sorununa katılıyorum. ancak az önceki bahsettiğim durumda gayet mantıklı bir talep.
__________________
"oturduğum mahallenin yolları çamurluydu, boyalı ayakkabı giysem bile, o yollardan geçtikten sonra çamurlanmamaları mümkün değildi. hayatım da böyle." yılmaz güney http://www.sipidik.com |
|
|
|
| Sponsorlu Bağlantılar | |
|
Zoque.Forum
Reklam
|
|
![]() |
| Etiketler |
|
bitirebiliriz , nasil , sessioni , anda , kapandigin , penceresi , browser , sorusu , gunun |
|
|
Zoque'a hoşgeldiniz!