PHP 5.5.20 is available

Çalışma Anı Yapılandırması

Bu işlevlerin davranışı php.ini içindeki ayarlardan etkilenir.

Oturum Yapılandırma Yönergeleri
İsim Öntanımlı Değişlik Yeri Sürüm Bilgisi
session.save_path "" PHP_INI_ALL  
session.name "PHPSESSID" PHP_INI_ALL  
session.save_handler "files" PHP_INI_ALL  
session.auto_start "0" PHP_INI_PERDIR  
session.gc_probability "1" PHP_INI_ALL  
session.gc_divisor "100" PHP_INI_ALL PHP 4.3.2'den beri kullanılabilmektedir.
session.gc_maxlifetime "1440" PHP_INI_ALL  
session.serialize_handler "php" PHP_INI_ALL  
session.cookie_lifetime "0" PHP_INI_ALL  
session.cookie_path "/" PHP_INI_ALL  
session.cookie_domain "" PHP_INI_ALL  
session.cookie_secure "" PHP_INI_ALL PHP 4.0.4'ten beri kullanılabilmektedir.
session.cookie_httponly "" PHP_INI_ALL PHP 5.2.0'dan beri kullanılabilmektedir.
session.use_strict_mode "0" PHP_INI_ALL PHP 5.5.2'den beri kullanılabilmektedir.
session.use_cookies "1" PHP_INI_ALL  
session.use_only_cookies "1" PHP_INI_ALL PHP 4.3.0'dan beri kullanılabilmektedir.
session.referer_check "" PHP_INI_ALL  
session.entropy_file "" PHP_INI_ALL  
session.entropy_length "0" PHP_INI_ALL  
session.cache_limiter "nocache" PHP_INI_ALL  
session.cache_expire "180" PHP_INI_ALL  
session.use_trans_sid "0" PHP_INI_ALL PHP <= 4.2.3'te PHP_INI_ALL. PHP < 5'te PHP_INI_PERDIR. PHP 4.0.3'ten beri kullanılabilmektedir.
session.bug_compat_42 "1" PHP_INI_ALL PHP 4.3.0'dan beri kullanılabilmektedir. PHP 5.4.0'da kaldırılmıştır.
session.bug_compat_warn "1" PHP_INI_ALL PHP 4.3.0'dan beri kullanılabilmektedir. PHP 5.4.0'da kaldırılmıştır.
session.hash_function "0" PHP_INI_ALL PHP 5.0.0'dan beri kullanılabilmektedir.
session.hash_bits_per_character "4" PHP_INI_ALL PHP 5.0.0'dan beri kullanılabilmektedir.
url_rewriter.tags "a=href,area=href,frame=src,form=,fieldset=" PHP_INI_ALL PHP 4.0.4'ten beri kullanılabilmektedir.
session.upload_progress.enabled "1" PHP_INI_PERDIR PHP 5.4.0'dan beri kullanılabilmektedir.
session.upload_progress.cleanup "1" PHP_INI_PERDIR PHP 5.4.0'dan beri kullanılabilmektedir.
session.upload_progress.prefix "upload_progress_" PHP_INI_PERDIR PHP 5.4.0'dan beri kullanılabilmektedir.
session.upload_progress.name "PHP_SESSION_UPLOAD_PROGRESS" PHP_INI_PERDIR PHP 5.4.0'dan beri kullanılabilmektedir.
session.upload_progress.freq "1%" PHP_INI_PERDIR PHP 5.4.0'dan beri kullanılabilmektedir.
session.upload_progress.min_freq "1" PHP_INI_PERDIR PHP 5.4.0'dan beri kullanılabilmektedir.
PHP_INI_* kiplerinin tanımları ve ayrıntılı açıklamaları için Yapılandırma ayarlarının yeri bölümüne bakınız.

Oturum yönetim sistemi, php.ini dosyanıza yerleştirebileceğiniz bazı yapılandırma yönergelerini destekler. Bu yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

session.save_handler string
session.save_handler yönergesi (kayıt sistemi), bir oturumla ilişkilendirilmiş veriyi saklamakta ve geri almakta nelerin kullanılacağını tanımlar. files (dosyalar) öntanımlı değerdir. Bazı eklentilerin kendi save_handler yönergeleri vardır; bunları kurulumunuzun phpinfo() çıktısında görebilirsiniz. Ayrıca bakınız: session_set_save_handler().
session.save_path string
session.save_path yönergesi session.save_handler yönergesinde belirtilen kayıt sistemine hangi değiştirgelerin aktarılacağını tanımlar. Öntanımlı kayıt sistemin (files) seçerseniz bu yönergenin değeri dosyaların oluşturulacağı dosya yolu olacaktır. Ayrıca bakınız: session_save_path().

Oturum dosyalarınızın yayılacağı dizin derinliğini belirlemekte kullanılmak üzere seçimlik bir N değiştirgesi vardır. Örneğin yönergeye '5;/tmp' değerini atarsanız, bir oturum dosyası şöyle bir konuma konabilir: /tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If. N değiştirgesini kullanacaksanız bu dizinleri kullanmadan önce oluşturmuş olmalısınız. Bunu yapmak için ext/session altında mod_files.sh adında bir betik vardır (Windows için mod_files.bat). Ayrıca, N değiştirgesinin sıfırdan büyük bir değerle kullanılması durumunda özdevinimli bir çöp toplayıcının devreye gireceğine de dikkat ediniz; daha ayrıntılı bilgi için php.ini dosyanıza bakınız. Ayrıca, N değiştirgesini kullanmanız durumunda, noktalı virgül (;) ayracı php.ini dosyasında açıklamaları başlatmak için kullanıldığından yönergenin değerini tırnak içine almalısınız.

Dosya saklama modülü dosyaları öntanımlı olarak mode 600 kullanarak oluşturur. Bu öntanımlı değer seçimlik MODE ile değiştirilebilir: N;MODE;/path burada MODE dosya kipinin sekizlik tabanda gösterimidir. Dosya kipini bu yolla belirlemek sürecin umask'ını etkilemez.

Uyarı

Bu yönergeyi öntanımlı değeriyle bırakırsanız veya herkesin okuyabileceği bir dizin tanımlarsanız (öntanımlı olan /tmp gibi), diğer kullanıcılar bu dizindeki dosyaların listesini alarak oturum bilgilerini sunucu üzerinde kendi amaçları doğrultusunda kullanabilirler.

Bilginize: PHP'nin 4.3.6 sürümünden önce, Windows kullanıcılar bu değeri PHP'nin oturum işlevlerini kullanacağı sırada değiştirmek zorundaydılar. Geçerli bir dosya yolu olarak, örneğin c:/temp belirtilebilir.

session.name string
session.name yönergesi çerez ismi olarak kullanılacak oturum ismini belirler. İsim sadece abecesayısal karakterler içermelidir. PHPSESSID öntanımlıdır. Ayrıca bakınız: session_name().
session.auto_start boolean
session.auto_start yönergesi, bir oturumun özdevinimli olarak isteğin başlangıcında başlatılıp başlatılmayacağını belirler. Öntanımlı değer 0 olup, başlatılmaz.
session.serialize_handler string
session.serialize_handler yönergesi, veriyi dizgeleştirmek/nesneleştirmek için kullanılacak eylemcinin ismini belirler. Şimdilik sadece PHP dizgeleştirme biçemi (ismi: php_serialize), PHP'nin dahili biçemleri (php ve php_binary ismiyle) ve WDDX (wddx ismiyle) desteklenmektedir. PHP, WDDX desteği ile derlenmişse wddx bir seçenek haline gelir. php_serialize PHP 5.5.4 ve sonrasında kullanılabilir. php_serialize dahili olarak düz serialize/unserialize işlevini kullanır ve php ile php_binary'nin sahip olduğu sınırlamalardan azadedir. Daha eski digeleştirme eylemcileri $_SESSION içinde ne bir sayısal indis ne de özel karakterleri (| ve !) içeren bir dizge indisi saklayabilir. Betiğin durmasına yolaçan özel karakter hataları ve sayısal indislerden kaçınmak için php_serialize biçemini kullanın. php öntanımlıdır.
session.gc_probability integer
session.gc_probability yönergesi session.gc_divisor yönergesi ile birlikte gc (garbage collection) çöp toplayıcı yordamının başlatılma olasılığını yönetmek için kullanılır. Ayrıntılar için session.gc_divisor yönergesinin açıklamasına bakınız.
session.gc_divisor integer
session.gc_divisor yönergesi session.gc_probability yönergesi ile birlikte, her oturum ilklendirilişinde gc (garbage collection) çöp toplayıcı yordamının başlatılma olasılığını yönetmek için kullanılır. Olasılık, gc_probability/gc_divisor şeklinde hesaplanır. Örneğin, 1/100 oranının anlamı: Her istekte GC sürecinin başlatılma şansı %1'dir. session.gc_divisor yönergesinin öntanımlı değeri 100'dür.
session.gc_maxlifetime integer
session.gc_maxlifetime yönergesi verinin kaç saniye sonra 'çöp' olarak ele alınıp temizleneceğini belirler. Çöp toplayıcı oturum başlangıcında etkin olur (session.gc_probability ve session.gc_divisor yönergelerine bağlı olarak).

Bilginize:

Eğer session.gc_maxlifetime değeri olarak farklı betikler farklı değerler belirtiyorsa fakat oturum verisini saklamak için aynı yeri paylaşıyorlarsa verileri temizlemek için en küçük değere sahip betiğin değeri kullanılır. Bu durumda, bu yönerge session.save_path yönergesi ile birlikte kullanılmalıdır.

Bilginize: Öntanımlı olan dosyalara dayalı oturum yönetimini kullanıyorsanız, dosya sisteminiz dosyalara erişim zamanlarını (atime) saklamak zorundadır. Windows FAT bunu yapmaz; bu bakımdan, FAT dosya sistemini veya dosya erişim zamanınını kaydetmeyen harhangi bir dosya sistemini kullanmak zorundaysanız, çöp toplamayı sağlayacak başka bir yöntem kullanmalısınız. PHP 4.2.3'ten beri, bu amaçla atime yerine mtime (değişiklik zamanı) kullanılmaktadır; dolayısıyla, atime kaydı yapmayan dosya sistemlerinde artık böyle bir sorunla karşılaşmamanız sağlanmıştır.

session.referer_check string
session.referer_check yöntemi, Her HTTP Referrer başlığında içerilmesini istediğiniz bir alt dizgeyi tanımlar. Referrer başlığı istemci tarafından bu alt dizge içerilmeden gönderilmişse gömülü oturum kimliği geçersiz olur. Yönergenin öntanımlı değeri boş dizgedir.
session.entropy_file string
session.entropy_file yönergesi, oturum kimliğinin oluşturulma sürecinde ek döküntü kaynağı olarak kullanılacak harici bir özkaynağa (bir dosyaya) bir yol belirtir. Çoğu Unix sisteminde kullanılan örnekler: /dev/random veya /dev/urandom. Bu özellik Windows'ta PHP 5.3.3'ten beri desteklenmektedir. session.entropy_length yönergesine sıfırdan farklı bir değer atamak PHP'nin Windows Random API'sini bir döküntü kaynağı olarak kullanmasını sağlayacaktır.

Bilginize: PHP 5.4.0 ve sonrasında session.entropy_file için /dev/urandom veya /dev/arandom öntanımlıdır (hangisi varsa). PHP 5.3.0'da bu yönergenin öntanımlı değeri boş dizge idi.

session.entropy_length integer
session.entropy_length yönergesi yukarıdaki yönergede belirtilen dosyadan okunacak baytların sayısını belirler. Öntanımlı değer 0'dir (hiç bayt okunmayacak).
session.use_strict_mode boolean
session.use_strict_mode modülün katı oturum kimliği kipini kullanıp kullanmayacağını belirler. Bu kip etkinse modül ilklendirilmemiş oturum kimliklerini kabul etmeyecektir. Tarayıcı tarafından ilklendirilmemiş bir oturum kimliği gönderilmişse, tarayıcıya yeni oturum kimliği gönderilir. Uygulamalar katı kipte oturum sabitlemesinden oturum benimsenmesi yoluyla korunur. 0(iptal) öntanımlıdır .
session.use_cookies boolean
session.use_cookies yönergesi modülün, oturum kimliğini istemci tarafında saklamak için çerezleri kullanıp kullanmayacağını belirler. Öntanımlı değer 1 olup çerezler kullanılır.
session.use_only_cookies boolean
session.use_only_cookies yönergesi modülün, oturum kimliğini istemci tarafında saklamak için sadece çerezlerin mi kullanılacağını belirler. Bu yönergeyi etkin kılarak oturum kimliklerinin URL'lerde aktarılmaması sağlamak suretiyle saldırıları önlemiş olursunuz. Bu yönerge PHP 4.3.0'da eklenmiştir. PHP 5.3.0'dan beri öntanımlı değer 1'dir (etkin).
session.cookie_lifetime integer
session.cookie_lifetime yönergesi tarayıcıya gönderilen çerezin ömrünü saniye cinsinden belirler. Öntanımlı olan 0 değerinin anlamı "tarayıcı kapatılıncaya kadar"dır. Ayrıca bakınız: session_get_cookie_params() ve session_set_cookie_params().

Bilginize:

Zaman aşımı zaman damgası sunucu zamanına göre belirlenir. Sunucu zamanının istemci zamanıyla aynı olma zorunluluğu yoktur.

session.cookie_path string
session.cookie_path yönergesi oturum çerezinin path anahtarını tanımlar. Bölü çizgisi / öntanımlıdır. Ayrıca bakınız: session_get_cookie_params() ve session_set_cookie_params().
session.cookie_domain string
session.cookie_domain yönergesi oturum çerezinin domain anahtarını tanımlar. Öntanımlı değer none olup, çerez belirtimine göre çerezi üreten sunucunun konak isminin kullanılacağı anlamına gelir. Ayrıca bakınız: session_get_cookie_params() ve session_set_cookie_params().
session.cookie_secure boolean
session.cookie_secure yönergesi oturum çerezinin secure anahtarını tanımlar. Öntanımlı olarak off olup anlamı: Çerezler sadece güvenli bağlantılar üzerinden gönderilmez. Bu yönerge PHP 4.0.4'te eklenmiştir. Ayrıca bakınız: session_get_cookie_params() ve session_set_cookie_params().
session.cookie_httponly boolean
session.cookie_httponly yönergesi oturum çerezinin httponly anahtarını tanımlar. Etkin olduğu takdirde çerezlere sadece HTTP protokolü üzerinden erişilebilir. Yani çerezlere JavaScript betik dilleriyle erişilemez. Bu ayar, (tüm tarayıcılar tarafından desteklenmiyor olsa da) özellikle XSS saldırılarıyla kimlik hırsızlığını önlemek için çok etkilidir.
session.cache_limiter string
session.cache_limiter yönergesi, oturum sayfaları için kullanılacak önbellek denetim yöntemini belirler. Şu değerlerden biri olabilir: nocache, private, private_no_expire ve public nocache öntanımlıdır. Bu değerlerin anlamları için session_cache_limiter() işlevinin belgesine de bakınız.
session.cache_expire integer
session.cache_expire yönergesi, önbelleğe alınan oturumlar için dakika cinsinden ömür (ttl) tanımlar. Önbellek sınırlayıcı yoksa bu ayar etkisizdir. 180 öntanımlı değerdir. Ayrıca bakınız: session_cache_expire().
session.use_trans_sid boolean
session.use_trans_sid yönergesi, şeffaf SID desteğinin etkin olup olmayacağını belirler. Öntanımlı değer 0 olup etkin değildir.

Bilginize: URL'ye dayalı oturum yönetiminin çerezlere dayalı oturum yönetimine göre daha fazla güvenlik riski vardır. Örneğin, kullanıcılar, etkin oturum kimliğini içeren bir URL'yi epostayla arkadaşlarına gönderebilir veya sık kullanılanlarına kaydedebilir; böylece bu kişiler sitenize hep aynı oturum kimliğiyle oturum açarlar.

session.bug_compat_42 boolean
PHP'nin 4.2.3 ve önceki sürümlerinde, belgelenmemiş bir hata vardı: register_globals ektin olmadığı halde bir oturum değişkeninin küresel etki alanında ilklendirilmesine izin verilirdi. PHP 4.3.0 ve sonrasında session.bug_compat_warn ektin olduğunda, bu özellik kullanılırsa bir uyarı verilmektedir. Bu özellik/hata bu yönergeye Off değeri atanarak iptal edilebilmektedir.
session.bug_compat_warn boolean
PHP'nin 4.2.3 ve önceki sürümlerinde, belgelenmemiş bir hata vardı: register_globals ektin olmadığı halde bir oturum değişkeninin küresel etki alanında ilklendirilmesine izin verilirdi. PHP 4.3.0 ve sonrasında bu yönerge session.bug_compat_42 yönergesi ile birlikte etkin kılındığında, bu özellik kullanılırsa bir uyarı verilmektedir.
session.hash_function mixed
session.hash_function yönergesi oturum kimliğinin üretilmesinde kullanılmak üzere bir ileti özeti algoritması belirtilmesini sağlar. '0' değeri MD5 (128 bitlik) algoritmasının, '1' ise SHA-1 (160 bitlik) algoritmasının kullanılmasını sağlar.

PHP 5.3.0'dan itibaren hash eklentisini (kullanılabilir durumdaysa) kullanarak sha512 veya whirlpool gibi algoritmalar belirtilebilmektedir. Desteklenen algoritmaların tam listesi hash_algos() işlevi ile edinilebilir

Bilginize:

Bu yönerge PHP 5'ten itibaren kullanılabilmektedir.

session.hash_bits_per_character integer
session.hash_bits_per_character yönergesi, ikil ileti özeti dizgesi okunur biçeme dönüştürülürken karakterlerin kaç bitle saklanacağını belirler. Olası değerler: '4' (0-9, a-f), '5' (0-9, a-v), '6' (0-9, a-z, A-Z, "-", ",").

Bilginize:

Bu yönerge PHP 5'ten itibaren kullanılabilmektedir.

url_rewriter.tags string
url_rewriter.tags yönergesi, şeffaf SID desteği etkin olduğunda oturum kimliğinin dahil edilmesi için hangi HTML etiketlerinin yeniden yazılacağını belirler. Öntanımlı değer: a=href,area=href,frame=src,input=src,form=fakeentry,fieldset=

Bilginize: Eğer tam HTML/XHTML uyumluluğu isterseniz, form girdisini silip form alanlarını sınırlamak için <fieldset> etiketlerini kullanın.

session.upload_progress.enabled boolean
Yükleme işleminin izlenmesini etkinleştirir. Öntanımlı olarak 1, yani etkindir.
session.upload_progress.cleanup boolean
Tüm POST verisi okunur okunmaz (yani, yükleme tamamlandığında) işlem bilgisi temizlenir. Öntanımlı olarak 1, yani etkindir.

Bilginize: Bu özelliğin daima etkin olması şiddetle önerilir.

session.upload_progress.prefix string
A prefix used for the upload progress key in the $_SESSION içinde yükleme işlemi anahtarı için kullanılacak önek. Bu önek, eşsiz bir indis elde ertmek için $_POST[ini_get("session.upload_progress.name")] değeriyle birleştirilir. "upload_progress_" öneki öntanımlıdır.
session.upload_progress.name string
İşlem bilgisini $_SESSION içinde saklamak için kullanılacak anahtar. Ayrıca bakınız: session.upload_progress.prefix. $_POST[ini_get("session.upload_progress.name")] değeri aktarılmammışsa veya kullanılabilir değilseyükleme işlemi kaydedilmez. "PHP_SESSION_UPLOAD_PROGRESS" öntanımlıdır.
session.upload_progress.freq mixed
Yükleme izleme bilgisinin ne sıklıkla güncelleneceğini tanımlar. Bayt cinsinden veya yüzde olarak belirtilebilir. Örneğin, yükleme izleme bilgisi her 100 baytta bir veya dosyanın her %1'i alındığında güncellenebilir. "1%" öntanımlıdır.
session.upload_progress.min_freq integer
Güncellemeler arasındaki asgari bekleme süresi (saniye cinsinden). "1" öntanımlıdır.

track_vars ve register_globals yapılandıma yönergeleri oturum değişkenlerinin nasıl saklanacağını ve eski haline getirileceğini belirler.

Yükleme işlemi, session.upload_progress.enabled etkin olmadıkça ve $_POST[ini_get("session.upload_progress.name")] değişkenine bir atama yapılmadıkça kaydedilmeyecektir. Daha ayrıntılı bilgi çin bakınız: Oturumda Yüklemelerin İzlenmesi

Bilginize:

PHP 4.0.3'ten itibaren, track_vars yönergesinin değeri daima On'dur.

add a note add a note

User Contributed Notes 12 notes

up
3
hassankhodadadeh at NOSPAM dot gmail dot com
2 years ago
max value for "session.gc_maxlifetime" is 65535. values bigger than this may cause  php session stops working.
up
1
00 at f00n dot com
6 years ago
After having many problems with garbage collection not clearing my sessions I have resolved it through the following.

First I found this in the php.ini (not something i noticed as i use phpinfo(); to see my hosting ini).

; NOTE: If you are using the subdirectory option for storing session files
;       (see session.save_path above), then garbage collection does *not*
;       happen automatically.  You will need to do your own garbage

; collection through a shell script, cron entry, or some other method. ;       For example, the following script would is the equivalent of
;       setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes):
;          cd /path/to/sessions; find -cmin +24 | xargs rm

With this is mind there are options.

1. dont use a custom save_path.
** This means if your isp hasnt defaulted your session temp to something safer than install default or you are using a shared directory for session data then you would be wise to use named sessions to keep your session from being viewable in other people's scripts.  Creating a unique_id name for this is the common method. **

2. use your custom folder but write a garbage collection script.

3. use a custom handler and a database
up
1
orbill
4 years ago
apparently the default value for session.use_only_cookies has changed in 5.3.3 from 0 to 1. If you haven't set this in your php.ini or your code to 0 transparent sessions won't work.
up
1
AskApache
4 years ago
This is how I set my session.save_path
session.save_path = "1;/home/askapache/tmp/s"
So to create the folder structure you can use this compatible shell script, if you want to create with 777 permissions change the umask to 0000;
sh -o braceexpand -c "umask 0077;mkdir -p s/{0..9}/{a..z} s/{a..z}/{0..9}"

Then you can create a cronjob to clean the session folder by adding this to your crontab which deletes any session files older than an hour:
@daily find /home/askapache/tmp/s -type f -mmin +60 -exec rm -f {} \; &>/dev/null

That will create sessions in folder like:
/home/askapache/tmp/s/b/sess_b1aba5q6io4lv01bpc6t52h0ift227j6

I don't think any non-mega site will need to go more than 1 levels deep.  Otherwise you create so many directories that it slows the performance gained by this.
up
1
GreenReaper
2 months ago
We found a session.save_path depth of 3 led to excessive wastage of inodes and in fact disk space in storing the directory tree. dir_indexes option on ext2/3/4 makes larger directories more feasible anyway, so we decided to move to a depth of 2 instead.

It took a little puzzling to figure out how to move the existing PHP sessions up one directory tree, but we ended up running this in the root sessions directory:

#!/bin/sh
for a in ./* ; do
    cd ./$a
    pwd
    for b in ./* ; do
      cd ./$b
      pwd
      # Move existing sessions out
      find ./* -xdev -type f -print0 | xargs -0 mv -t .
      # Remove subdirectories
      find ./* -xdev -type d -print0 | xargs -0 rmdir
      cd ..
  done
  cd ..
done

This script may not be the best way to do it, but it got the job done fast. You can modify it for different depths by adding or removing "for" loops.

The documentation gives a depth of 5 as an example, but five is right out. If you're going beyond 2, you're at the scale where you may want to to look at a large memcached or redis instance instead.
up
1
Christopher Kramer
2 months ago
On debian (based) systems, changing session.gc_maxlifetime at runtime has no real effect. Debian disables PHP's own garbage collector by setting session.gc_probability=0. Instead it has a cronjob running every 30 minutes (see /etc/cron.d/php5) that cleans up old sessions. This cronjob basically looks into your php.ini and uses the value of session.gc_maxlifetime there to decide which sessions to clean (see /usr/lib/php5/maxlifetime).

You can adjust the global value in your php.ini (usually /etc/php5/apache2/php.ini). Or you can change the session.save_path so debian's cronjob will not clean up your sessions anymore. Then you need to either do your own garbage collection with your own cronjob or enable PHP's garbage collection (php then needs sufficient privileges on the save_path).

Why does Debian not use PHP's garbarage collection?
For security reasons, they store session data in a place (/var/lib/php5) with very stringent permissions. With the sticky bit set, only root is allowed to rename or delete files there, so PHP itself cannot clean up old session data. See https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=267720 .
up
0
jlevene at etisoftware dot com
1 year ago
Being unable to find an actual copy of mod_files.sh, and seeing lots of complaints/bug fix requests for it, here's one that works.  It gets all its parameters from PHP.INI, so you don't have the opportunity to mess up:

#!/bin/bash
#
# Creates directories for PHP session storage.
# Replaces the one that "comes with" PHP, which (a) doesn't always come with it
# and (b) doesn't work so great.
#
# This version takes no parameters, and uses the values in PHP.INI (if it
# can find it).
#
# Works in OS-X and CentOS (and probably all other) Linux.
#
# Feb '13 by Jeff Levene.

[[ $# -gt 0 ]] && echo "$0 requires NO command-line parameters.
It gets does whatever is called for in the PHP.INI file (if it can find it).
" && exit 1

# Find the PHP.INI file, if possible:
phpIni=/usr/local/lib/php.ini                        # Default PHP.INI location
[[ ! -f "$phpIni" ]] && phpIni=/etc/php.ini            # Secondary location
[[ ! -f "$phpIni" ]] && phpIni=                        # Found it?

# Outputs the given (as $1) parameter from the PHP.INI file:
# The "empty" brackets have a SPACE and a TAB in them.
#
PhpConfigParam() {
    [[ ! "$phpIni" ]] && return
    # Get the line from the INI file:
    varLine=`grep "^[     ]*$1[     ]*=" "$phpIni"`

    # Extract the value:
    value=`expr "$varLine" : ".*$1[     ]*=[     ]*['\"]*\([^'\"]*\)"`
    echo "$value"
    }

if [[ "$phpIni" ]]
then
    savePath=`PhpConfigParam session.save_path`
    # If there's a number and semicolon at the front, remove them:
    dirDepth=`expr "$savePath" : '\([0-9]*\)'`
    [[ "$dirDepth" ]] && savePath=`expr "$savePath" : '[0-9]*;\(.*\)'` || dirDepth=0
    bits=`PhpConfigParam session.hash_bits_per_character`
    case "x$bits" in
        x)    echo "hash_bits_per_character not defined.  Not running." ; exit 2 ;;
        x4) alphabet='0 1 2 3 4 5 6 7 8 9 a b c d e f' ;;
        x5) alphabet='0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v' ;;
        x6) alphabet='0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v'
            alphabet="$alphabet w x y z A B C D E F G H I J K L M N O P Q R S T U V W"
            alphabet="$alphabet X Y Z - ,"
            ;;
        *)    echo "unrecognized hash_bits_per_character.  Not running." ; exit 2 ;;
    esac
else
    echo "Cannot find the PHP.INI file.  Not running.  Sorry."
    exit 2
fi

# The depth of directories to create is $1.  0 means just create the named
# directory.  Directory to start with is $2.
#
# Used recursively, so variables must be "local".

doDir() {
    local dir="$2"
    if [[ -d "$dir" ]]
    then
        echo "Directory '$dir' already exists.  No problem."
    elif [[ -f "$dir" ]]
    then
        echo "FILE '$dir' exists.  Aborting." ; exit 2
    else
        if mkdir "$dir"
        then
            echo "Directory '$dir' created."
        else
            echo "Cannot create directory '$dir'.  Aborting." ; exit 2
        fi
    fi
    chmod a+rwx "$dir"
    if [[ $1 -gt 0 ]]
    then
        local depth=$(( $1 - 1 ))
        for letter in $alphabet
        do    doDir $depth "$dir/$letter"
        done
    fi
    }
   
   
echo "Running with savePath='$savePath', dirDepth=$dirDepth, and bitsPerCharacter=$bits."
sleep 3

doDir $dirDepth "$savePath"

exit 0
up
0
mikaelkael at php dot net
5 years ago
Recently, I needed to change the session save_path in my program under Windows. With an ini_set('session.save_path', '../data/sessions'); (and session.gc_divisor = 1 for test), I always obtain 'Error #8 session_start(): ps_files_cleanup_dir: opendir(../data/sessions) failed: Result too large'.

I corrected this by changing with ini_set('session.save_path', realpath('../data/sessions'));
up
-1
Nicholas
4 years ago
Transient sessions do not appear to be working in 5.3.3

E.g.

<?php
    ini_set
("session.use_cookies", 0);
   
ini_set("session.use_trans_sid", 1);
   
session_start();
   
    if (isset(
$_SESSION["foo"])) {
        echo
"Foo: " . $_SESSION["foo"];
    } else {
       
$_SESSION["foo"] = "Bar";
        echo
"<a href=?" . session_name() . "=" . session_id() . ">Begin test</a>";
    }
?>

This works in 5.2.5, but not 5.3.3
up
-2
Wouter
4 years ago
When setting the session.cookie_lifetime directive in a .htaccess use string format like;

php_value session.cookie_lifetime "123456"

and not

php_value session.cookie_lifetime 123456

Using a integer as stated above dit not work in my case (Apache/2.2.11 (Ubuntu) PHP/5.2.6-3ubuntu4.5 with Suhosin-Patch mod_ssl/2.2.11 OpenSSL/0.9.8g)
up
-2
sony-santos at bol dot com dot br
6 years ago
In response to 00 at f00n, this very page explains:

"(...) if N is used and greater than 0 then automatic garbage collection will not be performed (...)"

So you can actually use custom save_path with automatic garbage collection, since you don't use the subdirectory option (that N subdirectory levels).
up
-10
phpforcharity dot 5 dot pistos at geoshell dot com
6 years ago
To get session IDs to show up in URIs, and not get stored via cookies, you must not only set session.use_cookies to 0, but also set session.use_trans_sid to 1.  Otherwise, the session ID goes neither in a cookie nor in URIs!
To Top