temizleme php oturum dosyaları

5 Cevap php

Web siteme PHP oturumları kullanın. Oturum bilgiler benim. / Oturum yolunda dosyalarında saklanır. Birkaç ay sonra ben artık bunlardan 145.000 Bu dizinde var, bu oturum dosyalar silinmiş asla keşfetti.

Nasıl bu kadar temizlenmesi gerekir? Ben programlı yapmak zorunda, yoksa orada ben bu temizleme otomatik olarak gerçekleşmesi olurdu yerde kullanabileceğiniz bir ayar mı?

EDIT söylemeyi unuttum: Bu site bir sağlayıcı çalışır, bu yüzden bir komut satırı erişimi yok. Ben ftp erişimi var, ama oturum dosyaları ben bunu sunucu veya PHP sadece bir ayar değil düşünüyorum got ilk cevaplar itibaren başka bir kullanıcıya (webserver süreç sanırım çalışan bir) aittir, bu yüzden ben olacak sanırım PHP bunun için bir şey uygulamak zorunda, ve (evde kendi makine üzerinde çalışan bir cron işi belki) bir tarayıcıdan düzenli aralıklarla çağrı

5 Cevap

Düzgün oturumunu işlemek için http://ar.php.net/manual/en/session.configuration.php bakabilirsiniz.

İşte bu değişkenleri bulabilirsiniz:

  • session.gc_probability
  • session.gc_divisor
  • session.gc_maxlifetime

Bu çöp toplayıcısı her sayfa isteği ile çalışan (GC) olasılık kontrol.

Onlar bazen silinecek ölçüde kesinlik olsun böylece komut dosyası veya. Htaccess dosyanın başında ini_set() olan ayarlayabilirsiniz.

Debian / Ubuntu / etc/cron.d/php5 tanımlanan bir cronjob ile bu işler

# /etc/cron.d/php5: crontab fragment for php5
#  This purges session files older than X, where X is defined in seconds
#  as the largest value of session.gc_maxlifetime from all your php.ini
#  files, or 24 minutes if not defined.  See /usr/lib/php5/maxlifetime

# Look for and purge old sessions every 30 minutes
09,39 *     * * *     root   [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -r -0 rm

Azami_ömür script basitçe, dakika sayısını bir oturum php.ini denetleyerek canlı tutulmalıdır verir, bu gibi görünüyor

#!/bin/sh -e

max=1440

for ini in /etc/php5/*/php.ini; do
        cur=$(sed -n -e 's/^[[:space:]]*session.gc_maxlifetime[[:space:]]*=[[:space:]]*\([0-9]\+\).*$/\1/p' $ini 2>/dev/null || true);
        [ -z "$cur" ] && cur=0
        [ "$cur" -gt "$max" ] && max=$cur
done

echo $(($max/60))

exit 0

Benim en iyi tahminim paylaşılan bir sunucuda ve oturum dosyaları tüm kullanıcılar böylece yapamazsın boyunca karıştırılır, ne de sen, onları silin gerektiğini olacaktır. Ne yapabilirsiniz, size ölçekleme ve / veya kullanıcıların oturum gizlilik konusunda endişeli iseniz, veritabanına oturumları taşımaktır.

Veritabanına o Cookie yazmaya başlayın ve vakit gelince birden fazla sunucu üzerinde uygulama size ölçekleme doğru uzun bir yol var.

Bunun dışında ben 145.000 dosyalar ile çok fazla endişe olmaz.

Komut dosyası / etc / cron.hourly / php oluşturmak ve oraya koyabilirsiniz:

#!/bin/bash

max=24
tmpdir=/tmp

nice find ${tmpdir} -type f -name 'sess_*' -mmin +${max} -delete

Sonra komut çalıştırılabilir (chmod + x) yapmak.

Şimdi her saat daha 24 dakika önce değiştirilmiş veri ile tüm oturum dosyaları silinecektir.

Birinin bir cronjob ile bunu yapmak istiyorum durumda, unutmayın lütfen bu:

find .session/ -atime +7  -exec rm {} \;

dosyaları bir çok olan zaman, gerçekten yavaş.

Yerine bu kullanmayı düşünün:

find .session/ -atime +7 | xargs rm

Durumunda Eğer isimleri kullanmak dosyasında boşluk var:

find .session/ -atime +7 -print0 | xargs -0 rm

Xargs çok daha az komuta silinecek dosyaları ile komut satırı doldurmak ve "rm" çalışacak "{} \-exec rm," wich her dosya için "rm" komutu çağırır.

Sadece benim iki kuruş