wmaraci reklam

Kullanıcı Online Zaman Yönetimi

4 Mesajlar 558 Okunma
pst.net
wmaraci reklam

PhpMania PhpMania WM Aracı Kullanıcı
  • Üyelik 23.04.2016
  • Yaş/Cinsiyet 41 / E
  • Meslek Proğramcı
  • Konum Kastamonu
  • Ad Soyad A** Ç**
  • Mesajlar 85
  • Beğeniler 11 / 11
  • Ticaret 0, (%0)
Merhabalar...

Bir sayfamız var. Sayfada yer alan dataların değişmesi için (değişmesi ödül/kazanç tanımında) kullanıcı sitede bulunması gerekiyor.

Kullanıcının sitede bulunması, $_SESSION ve $_COOKIE kullanarak online olup olmadığını tespit etmekle alakalı.

Ama ben her an üyenin online olup olmadığını --- ayrıca X full tanımlı zamanından itibaren 24 saati ve sonrasında 30 günü geçip geçmediğini üst üste toplama yöntemiyle buldurmam gerekiyor. Yani üye çıkış yapmayabilir ama browserda sitenin açık olup olmadığı ile ilgili bir data lazım...

Fikir ve önerileriniz için teşekkürler...
 

 

wmaraci
reklam

emreyvz emreyvz .NET Core & Angular & PHP E-Mail Onaysız
  • Üyelik 19.04.2016
  • Yaş/Cinsiyet 27 / E
  • Meslek Bilgisayar Mühendisi
  • Konum İstanbul Anadolu
  • Ad Soyad E** Y**
  • Mesajlar 689
  • Beğeniler 110 / 250
  • Ticaret 24, (%100)
Ajax ile belli bir sayfaya 10 saniyede bir setTimeOut ile Post atılabilir. Bu şekilde tarayıcı açık oldukça Post edilen sayfada $_SESSION["sure"] 10 artırılır. Gerekli süre kontrollerini de Post edilen sayfada yapabilirsiniz.

Bu yöntem isteğinizi karşılar ancak güvenlik açığı ortaya çıkarır. Ajax Kodlarını şifrelemek veya farklı bir şekilde sistem dışı POST'u engelleyebilirsiniz.
PhpMania

kişi bu mesajı beğendi.

Decimas Decimas WM Aracı Kullanıcı
  • Üyelik 19.04.2015
  • Yaş/Cinsiyet 26 / E
  • Meslek Developer
  • Konum İstanbul Avrupa
  • Ad Soyad E** E**
  • Mesajlar 821
  • Beğeniler 1 / 302
  • Ticaret 1, (%100)
İstediğin hesaplama anlık işlemler için olsaydı burada yolun node.js veya socket.io'ya doğru ayrılırdı (bence bu senaryoda da uygun) ama uzun zaman dilimlerini kontrol etmek söz konusu olunca PHP ve Cron Job da ihtiyacını fazlasıyla görecektir.

Öncei iki tarihi kıyaslarsın (gist) sonra y (yıl), d (gün), h (saat) değişkenlerini karşılaştırırsın. Aşağıdaki örnekten yola çıkıp hesap yaparsın, sonrasında cron ile saatlik veya hassasiyetin ne kadar ise o kadar aralıklarla (interval diyelim) çalıştırıp kontrol edersin.

Örnek:


function dateCompare($current, $expire, $diff = false)
{
$expire_date = new DateTime($expire);
$current_date = new DateTime($current);
$interval = $expire_date->diff($current_date);

// pure date diff result
if ($diff) {
return $interval;
}

// for past time conditions
foreach ($interval as $key => $value) {
if ($key == 'invert') {
return $value < 1 ? false : true;
}
}

return false;
}

$start_date = '2019-01-01 11:12:12';
$now = date('Y-m-d H:i:s', time());
$date_diff = dateCompare($start_date, $now, true);

print_r($date_diff);

if ($date_diff->y > 0) {
echo 'bir yıldan fazla zaman geçmiş';
} else if ($date_diff->d == 0) {
echo $date_diff->h . ' saat '+$date_diff->m+' dakika geçmiş';
} else if ($date_diff->d >= 1) {
echo $date_diff->d . ' gün geçmiş';
}


Uyarı: Yıl nereden çıktı? Yılı karşılaştırmadan direkt girişirsen 2 yıl 2 saat önce ile 12 yıl 2 saat önce için aynı sonuca ulaşırsın. Yılı da hesaba katıp sağlamasını yapıyoruz.

Bu datayı kullanıcı giriş veya benzeri bir aksiyonuyla beraber veritabanında tuttuğunu varsayıyorum. O zaman cron o datayı kotrol etmeli ve gereksiz olanları default bir değere eşitleyip veya where sorgusu için başka bir senaryo düşünüp performansı da kabetmezsin.

Uç bir senaryoda 1 milyar datayı cron ile her dakika başı kontrol ettiğini varsyarsam, tarihi geçmiş olan 500 milyon datayı es geçmen bile döngü için daha rahatlatıcı olacak. Ancak yine de data sayısı bellek ve zaman aşımına neden olabilir. Bunu ayrı bir tablo açıp angi aralıkları taradığını vs kaydedip sonraki dakika taramadıklarını tararsın.


Ekleme:

emreyvz adlı üyeden alıntı

Ajax ile belli bir sayfaya 10 saniyede bir setTimeOut ile Post atılabilir. Bu şekilde tarayıcı açık oldukça Post edilen sayfada $_SESSION["sure"] 10 artırılır. Gerekli süre kontrollerini de Post edilen sayfada yapabilirsiniz.

Bu yöntem isteğinizi karşılar ancak güvenlik açığı ortaya çıkarır. Ajax Kodlarını şifrelemek veya farklı bir şekilde sistem dışı POST'u engelleyebilirsiniz.


Bu dediğin bildiğin spagetti oluyor, 1 milyon sekmede açık sayfadan her 10 saniye başı istek aldığını düşünürsek bu durum i/o artışı, performans düşüşü ve sonrasında inode limiti aşımına neden olur. Inode ne alaka? PHP'de Session dediğimiz şey her seferinde dosyaya ve yazar okur (bu yüzden orta ve büyük ölçekli sistemlerde kullanılması uygun değil), dolayısıyla suspend yeme, gereksiz trafik tüketimi gibi sorunlar söz konusu olur.

Yine Ekleme: CSRF (bahsettiğin harici kaynaktan XHR isteğini önleme) her zaman efektif bir çözüm değil, kafasına takan geçer yine bot kasabilir ve sonuç olarak sistem yine gereksiz yük altına girebilir.
PhpMania katil2008

kişi bu mesajı beğendi.

no time for caution

PhpMania PhpMania WM Aracı Kullanıcı
  • Üyelik 23.04.2016
  • Yaş/Cinsiyet 41 / E
  • Meslek Proğramcı
  • Konum Kastamonu
  • Ad Soyad A** Ç**
  • Mesajlar 85
  • Beğeniler 11 / 11
  • Ticaret 0, (%0)
Teşekkürler Decimas. Bununla epeyi işimi görmüş olacam.
 

 

wmaraci
Mersin evden eve nakliyat
wmaraci
Konuyu toplam 1 kişi okuyor. (0 kullanıcı ve 1 misafir)
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al