• Php çerez ömrü. Çerezlerin PHP'deki bir oturumdan farkı nedir? Oturum dosyası depolama yolu

    Peki, hadi çözelim.

    İlk olarak aynı wiki'de HTTP hakkında bilgi edinin. Tamamen bilmenize gerek yok, ancak istek/yanıt yapısını asgari düzeyde anlamış olmanız, istek ve yanıtın başlıklara ve bir gövdeye sahip olduğunu anlamalısınız (istek/yanıt türüne bağlı olarak bir gövde olmayabilir) cevap).

    İşte burada. Kurabiye. Çerezler tarayıcı tarafında bulunur. Sunucuya yapılan her istekte HTTP başlığında iletilir (resimleri almaya gitseniz bile). Yalnızca çerezler var, yalnızca http çerezleri var. Çerezler ana makineye ve yola göre ayrılabilir. Bütün bunlar bize esneklik kazandırıyor ve güvenliğe yardımcı oluyor. PHP'de $_COOKIE içeriği bize SAPI tarafından sağlanmaktadır. PHP işleme için bir istek aldığında, kullanılan SAPI (php-fpm, cgi, mod_php'nin kendi SAPI uygulamaları vardır) şu anda isteğin başlıklarını ve gövdesini alır, bunları ayrıştırır ve $_SERVER, $_GET gibi tüm bu süper küresel dizileri doldurur. vb. $_COOKIE. Müşterinin bize gönderdiği her şey (istekleri yapan şey müşteridir, bunları işleyen şey ise sunucudur) ve tarayıcı bize yalnızca isteğin gönderildiği yere bağlı olarak mümkün olan çerezleri gönderir. Çerezler yanıttaki Set-Cookie başlığı kullanılarak ayarlanır, yani burada PHP hakkında değil HTTP hakkında daha fazla bilgi okumanız gerekir. PHP sadece bu şeylerle çalışmanıza izin verir. Başlık işlevini kullanarak yanıt başlıklarıyla çalışarak çerezleri doğrudan ayarlayabilirsiniz. Ayrıca, çerezlerin ömrünü 0'a ayarlarsanız, tarayıcı kapatıldığında oturum değil, çerezler sıfırlanacak, çünkü tüm bu çerezler unutulacaktır.

    Burada... oturumlar... PHP'de oturum genellikle bir dosyadır. Sadece rastgele bir isme sahip bir dosya. Örneğin, php.ini dosyasında session.autostart belirtilirse veya bir session_start çağrısı yapılırsa, kullanıcı oturumu için bir dosya oluşturulur (ihtiyaçlarınıza bağlı olarak bunu Radish'e veya Memcache'e, depolama alanınıza vb. taşıyabilirsiniz). Veriler aynı zamanda şifrelenebilir, bu da varsayılan olarak gerçekleşir). Bu dosyanın bir kimliği var, sadece rastgele bir dize. Ve eğer bir istek işlenirken önceki isteğe ait bir oturum bulunamazsa, yeni bir istek oluşturulur.

    Ve şimdi en ilginç şeye geliyoruz - PHP'nin önceki istekteki oturumu mevcut istekle nasıl bağladığı. Ve burada her şey oldukça basit - kurabiyeler. Bir kullanıcıya bir oturum atandığında, oturum tanımlayıcının yazıldığı yalnızca http çerezi otomatik olarak ayarlanır (böylece kötü kişiler oturumumuzu js'den çalamaz). Tarayıcı hata ayıklayıcısında, oturumları denediğinizde bir PHPSESSID çerezinizin olup olmadığını (adı ayarlardan değiştirilebilir ve genel olarak oturumlar yalnızca çerezler aracılığıyla bağlanamaz, bunlar zaten güvenlik sorunlarıdır) olup olmadığını görebilirsiniz.

    Bir istek SAPI tarafından işlendiğinde, eğer session.autostart varsa, yeni bir oturum oluşturmaya başlamadan önce, puf yine de oturum tanımlayıcıya sahip bir çerezimiz olup olmadığına bakar, olup olmadığını kontrol eder ve varsa, sakinleşir ve yenisini yaratmaz. Oturum çerezler aracılığıyla bağlı olduğundan, bu çerezin ömrünü (php.ini'de) kendiniz ayarlayabilir ve böylece oturumun ömrünü düzenleyebilirsiniz.

    İşte... çerezler ne zaman kullanılmalı ve oturumlar ne zaman kullanılmalı? Çerezlerde ne kadar fazla veri varsa (ve bunların bir kelime sınırı varsa), her istek için o kadar fazla veri aktardığımızın anlaşılması tavsiye edilir. Yani, 1 kilobaytlık veri almak için başlıklara birkaç kilobaytlık çerez aktarmamız hiç hoş değil. Optimizasyona odaklanan kişiler, trafik ve paket miktarını azaltmak için görüntüleri çerezsiz ayrı alanlarda bile saklarlar (genellikle basit bir HTTP isteği, bir TCP paketinin boyutuna sığar). Herhangi bir sayfada JS'den gelen bu verilerle (örneğin, JS'de çevirileri uygulamak için kullanıcı tarafından seçilen yerel ayar) çalışmanız gerekiyorsa, çerezleri kullanmalısınız. Diğer her şey için elbette oturumları kullanmak daha iyidir. Her durumda, çok karmaşık bir şey yapmanıza gerek olmadığı ilk aşamalarda.

    Çerezler, uzaktaki bir bilgisayarın tarayıcısının, geri dönen ziyaretçileri tanımlamak ve web sayfası parametrelerini (değişkenler gibi) saklamak için verileri depolamasına yönelik bir mekanizmadır.

    Belirli bir örnek kullanarak Çerezlerin kullanımına bir örnek verelim.

    Diyelim ki bir web sitesi ziyaret sayacı yazmamız gerekiyor. Her bir ziyaretçinin siteyi kaç kez ziyaret ettiğini bilmemiz gerekiyor.

    Bu sorun iki şekilde çözülebilir. Bunlardan ilki kullanıcıların IP adreslerinin kaydını tutmaktır. Bunu yapmak için, yaklaşık yapısı aşağıdaki gibi olan tek bir tablodan oluşan bir veritabanına ihtiyacınız vardır:

    Bir kullanıcı bir siteyi ziyaret ettiğinde onun IP adresini belirlememiz, veritabanında ziyaretleriyle ilgili bilgi bulmamız, sayacı artırmamız ve bunu ziyaretçinin tarayıcısında görüntülememiz gerekiyor. Böyle bir prosedür için bir işleyici (script) yazmak zor değildir. Ancak bu yöntemi kullanırken aşağıdaki sorunlarla karşılaşıyoruz:

    • Her IP adresi için kayıtları çok büyük olabilen tek bir tabloda tutmanız gerekir. Buradan işlemci zamanını ve disk alanını irrasyonel bir şekilde kullandığımız sonucu çıkıyor;
    • Çoğu ev kullanıcısının dinamik IP adresleri vardır. Yani bugün adresi 212.218.78.124 ve yarın - 212.218.78.137. Bu nedenle, bir kullanıcının birkaç kez tanımlanması olasılığı yüksektir.

    Uygulaması çok daha kolay ve daha etkili olan ikinci yöntemi kullanabilirsiniz. Cookie'de uzak kullanıcının diskinde saklanacak bir değişken belirliyoruz. Bu değişken ziyaretlerle ilgili bilgileri depolayacaktır. Ziyaretçi sunucuya eriştiğinde komut dosyası tarafından okunacaktır. Bu tanımlama yönteminin faydaları açıktır. Öncelikle IP adresleri hakkında çok fazla gereksiz bilgiyi saklamamıza gerek yok. İkinci olarak, ziyaretleriyle ilgili veriler her site ziyaretçisi için özel olarak saklandığından dinamik IP adresleriyle ilgilenmiyoruz.

    Artık Çerezleri neden sitenin müşterisinden (ziyaretçisinden) az miktarda bilgi depolamak için kullanabileceğimiz açık, örneğin: site ayarları (sayfa arka plan rengi, dil, tablo tasarımı vb.) ve diğer bilgiler .

    Çerezler, web sitesi ziyaretçilerinin diskinde saklanan sıradan metin dosyalarıdır. Çerez dosyaları, sunucu tarafından içlerine kaydedilen bilgileri içerir.

    Programlama Çerezleri

    Çerezleri programlamaya başlayalım.

    Çerezleri ayarlamak için işlevi kullanın Çerezi Ayarla(). Bu işlev için belirtebileceğiniz altı parametre vardır; bunlardan biri gereklidir:

    • ad - Çereze atanan adı (dizelerin) belirtir;
    • değer - değişkenin (dize) değerini tanımlar;
    • sona erme - değişken yaşam süresi (tamsayı). Bu parametre belirtilmediği takdirde Çerez oturumun sonuna kadar, yani tarayıcı kapatılana kadar "yaşayacaktır". Eğer bir zaman belirtilirse, o zaman geldiğinde Cookie kendini imha edecektir.
    • yol - Çerezin yolu (dize);
    • etki alanı - etki alanı (dize). Değer, Cookie'nin yüklendiği ana bilgisayarın adına ayarlanır;
    • güvenli - Güvenli bir HTTPS bağlantısı üzerinden çerez iletimi.

    Genellikle yalnızca ilk üç parametre kullanılır.

    Çerezleri ayarlama örneği:



    SetCookie("Test", "Değer");

    // Cookie'yi kurulumdan sonra bir saatliğine ayarlayın:
    SetCookie("My_Cookie", "Value", time()+ 3600);

    ?>

    Çerezleri kullanırken, lütfen Çerezlerin tarayıcıya ilk bilgi çıkışından önce (örneğin, echo operatörü veya herhangi bir fonksiyonun çıkışı tarafından) ayarlanması gerektiğini unutmayın. Bu nedenle, Çerezlerin betiğin en başında ayarlanması tavsiye edilir. Çerezler, belirli bir sunucu başlığı kullanılarak ayarlanır ve eğer komut dosyası herhangi bir çıktı verirse, bu, belgenin gövdesinin başladığı anlamına gelir. Sonuç olarak Çerezler kurulmayacaktır ve bir uyarı görüntülenebilir. Çerezlerin başarıyla yüklenip yüklenmediğini kontrol etmek için aşağıdaki yöntemi kullanabilirsiniz:

    // Cookie'yi oturumun sonuna kadar ayarlayın:
    // Cookie başarıyla ayarlandıysa SetCookie işlevi TRUE değerini döndürür:
    "

    Çerezler başarıyla kuruldu!

    " ;
    ?>

    İşlev Çerezi Ayarla()Çerez başarıyla ayarlandıysa TRUE değerini döndürür. Eğer Cookie ayarlanamıyorsa, SetCookie() işlevi FALSE değerini ve muhtemelen bir uyarıyı (PHP ayarlarına bağlı olarak) döndürecektir. Başarısız Çerez kurulumuna örnek:

    // Çerezler ayarlanamaz çünkü göndermeden önce
    // Çerez başlığında tarayıcıya "Merhaba" dizesini görüntülüyoruz:
    yankı "Merhaba";
    // SetCookie işlevi FALSE değerini döndürecektir:
    if (SetCookie("Test" , "Value" )) echo "

    Çerez başarıyla ayarlandı!

    " ;
    aksi takdirde yankı "

    Çerez ayarlanamadı!

    "
    ;
    // "Çerez yüklenemedi!" yazdırır.
    ?>

    Çerez başlığını göndermeden önce tarayıcıya "Merhaba" dizesini yazdırdığımız için çerez ayarlanamadı.

    Çerez Değerlerini Okumak

    Çerezlere ve değerlerine erişim oldukça basittir. Bunlar $_COOKIE ve $HTTP_COOKIE_VARS süper küresel dizilerinde depolanır.

    Değerlere, yüklenen Çerezlerin adıyla erişilir, örneğin:

    echo $_COOKIE["my_cookie"];
    // Yüklenen "My_Cookie" Çerezinin değerlerini görüntüler

    Bir Çerez ayarlama ve ardından onu okumaya bir örnek:

    // Cookie "test"i bir saat boyunca "Merhaba" değerine ayarlayın:
    setcookie ("test", "Merhaba", zaman ()+ 3600);
    // Bir sonraki komut dosyası isteği "Merhaba" yazdırır:
    echo @$_COOKIE [ "deneme" ];
    ?>

    Ele alınan örnekte, betiğe ilk kez erişildiğinde, Çerez "testi" "merhaba" değeriyle ayarlanır. Komut dosyasına tekrar eriştiğinizde, Çerez değeri "test", yani "Merhaba" dizesi görüntülenecektir.

    Çerez değerlerini okurken, örneğin operatörü kullanarak Çerezlerin varlığını kontrol etmeye dikkat edin. isset(). Ya operatörün hata çıktısını bastırarak @

    Çerezleri kullanarak sayfa yükleme sayısına ilişkin bir sayacın nasıl oluşturulacağına ilişkin bir örnek:

    // "Ölümlü" Cookie'nin önceden ayarlanmış olup olmadığını kontrol edin,
    // Evet ise değerini okuyun,
    // Ve sayfa erişim sayacının değerini arttırıyoruz:
    if (isset ($ _COOKIE [ "Ölümlü" ])) $ cnt = $ _COOKIE [ "Ölümlü" ]+ 1 ;
    yoksa $cnt = 0;
    // Cookie "Mortal"ı sayaç değeriyle ayarlayalım,
    // 18.07.29'a kadar "ömür" süresiyle,
    // Yani çok uzun bir süre boyunca:
    setcookie ("Ölümlü", $ cnt, 0x6FFFFFFFF);
    // Bu sayfanın ziyaret (indirme) sayısını görüntüler:
    Eko "

    Bu sayfayı ziyaret ettiniz mi? " .@$_COOKIE ["Ölümlü" ]. " bir kere

    " ;
    ?>

    Çerezleri Kaldırma

    Bazen Çerezleri silmek gerekli olabilir. Bunu yapmak zor değil; sadece Çerez'i aynı adla ve boş bir parametreyle yeniden ayarlamanız yeterli. Örneğin:

    //Çerez "Test"i Sil:
    SetCookie("Test", "");
    ?>

    Cookies dizisini ayarlama ve onun okuma

    Cookies isimlerinde köşeli parantez kullanarak Cookies dizisini ayarlayıp ardından Cookies dizisini ve o dizinin değerlerini okuyabiliriz:

    // Cookies dizisini kuruyoruz:
    setcookie ("çerez", "İlk");
    setcookie ("çerez", "İkinci");
    setcookie("çerez", "Üçüncü");

    // Sayfa yeniden yüklendikten sonra şunu göstereceğiz:
    // Cookies dizisi "cookie"nin bileşimi:
    if (isset ($ _COOKIE [ "çerez" ])) (
    foreach ($_COOKIE["çerez"] as $isim => $değer) (
    echo "$isim: $değer
    " ;
    }
    }
    ?>

    Çerez kullanmanın faydaları inkar edilemez. Ancak bunların kullanımında da bazı sorunlar bulunmaktadır. Bunlardan ilki, ziyaretçinin tarayıcının Çerezleri kabul etmesini engelleyebilmesi veya sadece Çerezlerin tamamını veya bir kısmını silmesidir. Bu nedenle bu tür ziyaretçileri tespit etmekte biraz zorluk yaşayabiliriz.



    <<< Назад İçerik İleri >>>
    Başka sorularınız varsa veya net olmayan bir şey varsa - sayfamıza hoş geldiniz.

    PHP $_SESSION değişkenlerinin çalışma süresi ve bunun sonucunda web uygulamalarının etkinliği oturumun süresine bağlıdır. Örneğin bir kullanıcı sisteme giriş yapmışsa, kullanıcı adı ve şifresini tekrar girmeye gerek kalmadan ne kadar süre aktif kalabileceği bu parametreye bağlıdır.

    Oturum yaşam sürelerini ayarlamanın farklı yolları vardır. Örnek olarak Linux işletim sistemini kullanarak bunu anlamaya çalışalım.

    Oturumun ömrü nasıl öğrenilir?

    Kurulumdan önce mevcut duruma bakmaya değer. Bunu yapmanın birkaç yöntemi vardır:

    1. PHP komutunu kullanarak sunucuda

    php -i | grep oturumu

    Oturumlarla ilgili parametrelerin bir listesini alıyoruz. İlgileniyoruz:

    • session.cookie_lifetime => 0 => 0
    • session.gc_maxlifetime => 1440 => 1440

    Bu değerler varsayılan değerdir. cookie_lifetime => 0 tarayıcı kapatılıncaya kadar çerezlerin etkisinden bahsediyor, bu parametreyi belirli bir değere ayarlarsanız, oturum aktifken oturum kesilecektir, bu nedenle sıfırda bırakmak daha iyidir.

    2. PHP'nin ini_get fonksiyonunu kullanma

    $maxlifetime = ini_get("session.gc_maxlifetime");
    $cookielifetime = ini_get("session.cookie_lifetime");

    Echo $maxlifetime;
    echo $çerezömrüboyu;

    systemctl apache2'yi yeniden başlat || systemctl httpd'yi yeniden başlat

    * systemd olmayan Linux versiyonlarında bu komutu kullanırız hizmet apache2 yeniden başlat veya hizmet httpd yeniden başlat.

    FastCGI (PHP-FPM) kullanırsak:

    .htaccess dosyası aracılığıyla yapılandırma

    Bu dosya, web yöneticisinin bazı web sunucusu ayarlarını yönetmesine olanak tanır. Düzenlemek için site dosyalarına erişmeniz gerekir. PHP işleyicisi Apache değilse, örneğin NGINX + PHP-FPM ise yöntem çalışmayacaktır. Yine de bir yol da var (daha fazlası aşağıda).

    .htaccess dosyasına aşağıdakileri ekliyoruz:

    php_value session.gc_maxlifetime 86400
    php_value session.cookie_lifetime 0

    * gördüğünüz gibi parametreler php.ini aracılığıyla yapılandırıldığındakilerle aynıdır.

    Yukarıda belirtildiği gibi Apache kullanılmadığı takdirde yöntem çalışmayacaktır. Ancak kurulum sunucuda yapılabilir (yine uygun erişime sahip olmamız gerekir).

    Web sunucusu yapılandırma dosyasını örneğin php-fpm'de açın:

    vi /etc/php-fpm.d/www.conf

    ve düzenleyin/ekleyin:

    php_value = 86400
    php_value = 0

    Daha sonra servisi yeniden başlatıyoruz:

    systemctl php-fpm'yi yeniden başlat || hizmet php-fpm yeniden başlatma

    Uygulama kodunda parametre ayarlama

    Bu yöntem, farklı portal sayfalarının farklı oturum yaşam sürelerine sahip olması gerektiğinde yararlı olabilir. Bunu yapmak için PHP'nin ini_set ve session_set_cookie_params işlevlerini kullanabilirsiniz, örneğin:

    Ini_set("session.gc_maxlifetime", 86400);
    ini_set("session.cookie_lifetime", 0);
    session_set_cookie_params(0);

    Oturum_başlangıcı();

    Bir oturumu açmadan önce işlevler çağrılmalıdır (session_start).

    Uygulamada bir oturum ayarlama

    Bazı uygulamalar ayarları geçersiz kılabilir. Bu durumda oturum ömrünü program parametrelerinde ayarlamanız gerekir. Her uygulamanın, kendi başınıza çözmeniz gereken kendi ayarları vardır. Bitrix CMS'de oturum ayarlama örneğini ele alalım.

    Hadi gidelim Kullanıcı grubu- bir grup seçin - Emniyet. “Oturum ömrü (dakika)” parametresini bulun ve saati ayarlayın, örneğin 1440 (dakika cinsinden 24 saat).

    Oturumlar otomatik olarak nasıl yenilenir

    Bir oturumun belirli bir süre için düzenlenmesi ve belirli bir saatte bitmesi kullanıcının aktif oturumunun kesintiye uğramasına neden olabilir. Ziyaretçinin sayfayı yenilemesi durumunda oturum süresinin otomatik olarak uzatılması çok daha kullanışlı olur. Bunun için yukarıdaki tüm örneklerde 0 olarak ayarladığımız cookie_lifetime parametresi bulunmaktadır.

    Cookie_lifetime değerini 86400 olarak ayarlarsak 24 saat sonra oturum sonlandırılacaktır. Bu her zaman uygun değildir.

    Oturumu kontrol etme ve kesme ihtiyacı varsa PHP işlevini kullanabilirsiniz. session_destroy().

    Oturum dosyası depolama yolu

    Oturum dosyalarının depolama konumu parametre ile belirtilir session.save_path aynı zamanda hayatın zamanı da öyle. Varsayılan olarak yol kullanılabilir /var/lib/php/sessions.

    Bu önemli bir parametredir - eğer web sunucusunun bu dizine yazma izinleri yoksa, bu durum oturumların saklanamamasına yol açacak ve bu da uygulamalardan beklenmeyen sonuçlara neden olacaktır.