Menü
Bedava
kayıt
ev  /  Eğitim/ php oturumlarının depolandığı yer. Neşter altında PHP oturumları

php oturumlarının depolandığı yer. Neşter altında PHP oturumları

İnternette oturumların ne olduğu, ne için olduğu ve onlarla nasıl çalışılacağı hakkında binlerce öğretici var. Ancak ne yazık ki, onları okuduktan sonra hala birçok soru var. Bence her şeyi anlamanın en kolay yolu, seansların nasıl çalıştığını içeriden görmek. Şunlar. tarayıcının ve web sunucusunun değişim günlüklerini inceleyin ve ayrıca istemci ve sunucu tarafında hangi verilerin depolandığını görün.

Bundan sonra, birçok nokta çok daha anlaşılır hale gelir ve çalışma mekanizmasının kendisi daha şeffaf hale gelir.

Aşağıdaki standart komut dosyasını kullanarak oturumların çalışmalarını inceleyeceğiz:

Şu şekilde çalışır:

Blok 1. session_start () işlevi, benzersiz oturum tanımlayıcısı PHPSESSID'yi kullanarak yeni bir oturum oluşturur veya eski bir oturumu yükler.

2. blok Oturum geri yüklendiyse, $ _SESSION ["görünümler"] değeri artırılır. Değilse, bir olarak başlatılır.

Teorik olarak tarayıcıda çerez desteği açıksa mekanizma çalışmalı ve sayfa her yenilendiğinde sayaç değeri bir artacaktır.

Komut dosyasının ilk yüklemesi

Başlıkları iste

GET / HTTP / 1.1 Ana Bilgisayar: firerange.local Kullanıcı Aracısı: Mozilla / 5.0 (Windows NT 5.1; rv: 6.0.2) Gecko / 20100101 Firefox / 6.0.2 Kabul: metin / html, uygulama / xhtml + xml, uygulama / xml; q = 0.9, * / *; q = 0.8 Kabul-Dil: ru-ru, ru; q = 0.8, en-us; q = 0.5, en; q = 0.3 Kabul-Kodlama: gzip, deflate Kabul-Charset : windows-1251, utf-8; q = 0.7, *; q = 0.7 Bağlantı: canlı tutma Önbellek Kontrolü: maksimum yaş = 0

Yanıt başlıkları

HTTP / 1.1 200 TAMAM Tarih: Per, 29 Eylül 2011 20:36:15 GMT Sunucu: Apache / 2.2.13 (Win32) PHP / 5.2.10 X-Powered-By: PHP / 5.2.10 Set-Cookie: PHPSESSID = k33en6ccgcia7125mitj5te4u6; yol = / Bitiş: Per, 19 Kas 1981 08:52:00 GMT Önbellek Kontrolü: depolama yok, önbellek yok, yeniden doğrulama gerekir, kontrol sonrası = 0, ön kontrol = 0 Pragma: önbelleksiz İçerik Uzunluğu: 58 Canlı Tut: zaman aşımı = 5, maks = 100 Bağlantı: Canlı Tutma İçerik Türü: metin / html

Bir yorum

Orijinal istekte, tarayıcı kendisini hiçbir şekilde tanımlamadı, bu nedenle mekanizma PHP oturumları yeni bir benzersiz oturum tanımlayıcısı oluşturdu ve tarayıcıya bu tanımlayıcının saklanacağı bir tanımlama bilgisi oluşturmasını söyledi.

sunucu tarafı

Sunucu tarafında yapılan script sonucunda aşağıdaki içerikle sess_k33en6ccgcia7125mitj5te4u6 dosyası oluşturulur:

İstemci tarafı

İstemci tarafında, benzersiz oturum tanımlayıcısının değerini depolayan bir PHPSESSID tanımlama bilgisi oluşturulur.

Not. saat PHP ayarları varsayılan olarak, PHPSESSID tanımlama bilgisinin ömrü, tarayıcı kapatılana kadardır. Şunlar. tarayıcı kapanır kapanmaz çerez silinecek ve buna göre oturum kaybolacaktır. PHPSESSID tanımlama bilgisi ömrü, session.cookie_lifetime değeri değiştirilerek değiştirilebilir.

Komut dosyasının sonucu

İkinci komut dosyası yükü

Başlıkları iste

GET / HTTP / 1.1 Ana Bilgisayarı: ateşleme aralığı.local Kullanıcı Aracısı: Mozilla / 5.0 (Windows NT 5.1; rv: 6.0.2) Gecko / 20100101 Firefox / 6.0.2 Kabul et: metin / html, uygulama / xhtml + xml, uygulama / xml; q = 0.9, * / *; q = 0.8 Kabul Et-Dil: ru-ru, ru; q = 0,8, en-us; q = 0,5, en; q = 0,3 Kabul-Kodlama: gzip, deflate Kabul Et-Karakter Seti: windows-1251, utf-8; q = 0.7, *; q = 0.7 Bağlantı: canlı tutma Çerez: PHPSESSID = k33en6ccgcia7125mitj5te4u6 Önbellek Kontrolü: maksimum yaş = 0

Yanıt başlıkları

HTTP / 1.1 200 Tamam Tarih: Per, 29 Eylül 2011 20:49:41 GMT Sunucu: Apache / 2.2.13 (Win32) PHP / 5.2.10 X-Powered-By: PHP / 5.2.10 Bitiş: Per, 19 Kasım 1981 08:52:00 GMT Önbellek Kontrolü: depolama yok, önbellek yok, yeniden doğrulanmalıdır, kontrol sonrası = 0, ön kontrol = 0 Pragma: önbellek yok İçerik Uzunluğu: 58 Canlı Tut: zaman aşımı = 5, max = 100 Bağlantı: Canlı Tutma İçerik Türü: metin / html

Bir yorum

Tarayıcı, PHPSESSID çerezini, PHP'nin $ _SESSION dizisini sess_k33en6ccgcia7125mitj5te4u6'dan gelen değerlerle başlatmak için kullandığı web sunucusuna gönderir. Buna göre blok 2'de IF dalı (doğrudan) yerine getirilir.

sunucu tarafı

Komut dosyası işlemi sonucunda sess_k33en6ccgcia7125mitj5te4u6 dosyasının içeriği değişir:

İstemci tarafı

İstemci tarafında değişen bir şey yok.

Komut dosyasının sonucu

Sıradaki ne?

Tarayıcıyı kapatmadan önce sonraki sayfa yüklemeleri, ikinci komut dosyası yüklemesinin yaptığına benzer şekilde çalışacaktır.

Çünkü çerezin ömrü mevcut tarayıcı oturumu tarafından sınırlandırılmıştır, daha sonra kapatıldıktan sonra benzersiz oturum tanımlayıcısı kaybolacak ve yeniden başlatıldığında süreç yeniden başlayacaktır.

Ancak, PHPSESSID'yi komut dosyası parametresi olarak açıkça belirterek kaydedilen oturuma dönebilirsiniz:

Oturuma geri dönmek oldukça keyfidir, çünkü betiğin çalışmasının bir sonucu olarak, bu durumda bir çerez oluşturulmaz. Sunucu yanıt başlıkları:

HTTP / 1.1 200 Tamam Tarih: Per, 29 Eylül 2011 21:01:52 GMT Sunucusu: Apache / 2.2.13 (Win32) PHP / 5.2.10 X-Powered-By: PHP / 5.2.10 Bitiş: Per, 19 Kasım 1981 08:52:00 GMT Önbellek Kontrolü: depolama yok, önbellek yok, yeniden doğrulanmalıdır, kontrol sonrası = 0, ön kontrol = 0 Pragma: önbellek yok İçerik Uzunluğu: 58 Canlı Tut: zaman aşımı = 5, max = 100 Bağlantı: Canlı Tutma İçerik Türü: metin / html

Şunlar. bu özel oturumla çalışmayı sürdürmek için tüm bağlantılara PHPSESSID = k33en6ccgcia7125mitj5te4u6 atamanız gerekecek.

Not. PHP'ye yalnızca benzersiz oturum tanımlayıcısını tanımlama bilgisinden geçirmesini söyleyebilirsiniz. Bunu yapmak için session.use_only_cookies'i 1 olarak ayarlayın. Bu durumda, yukarıda gösterilen numara çalışmayacaktır.

Tarayıcıda çerezler devre dışı bırakılırsa, yukarıda yaptığımız gibi oturum tanımlayıcısını parametreler aracılığıyla iletebilirsiniz. Ayrıca PHP, gerekli parametreyi bağlantılara ekleyecek ve formlara gizli alanlar ekleyecek bir mekanizmaya sahiptir. Çalışma prensibi çerezlerle tamamen aynıdır, bu nedenle bu durumu ayrı olarak analiz etmeyeceğiz.

Küçük anket (SSS)

Oturum verileri fiziksel olarak nerede depolanır?

Oturum verileri sunucuda saklanır. Varsayılan olarak dosyalara yazılırlar, ancak oturum verilerini depolamak için kendi mekanizmanızı tanımlayabilirsiniz (örneğin, bir veritabanı kullanarak). Daha fazla ayrıntı için session_set_save_handler işlevine bakın.

Benzersiz oturum kimliğini kim oluşturur?

Benzersiz oturum tanımlayıcısı (PHPSESSID) sunucu tarafından oluşturulur.

Kendi oturum mekanizmamı yazabilir miyim?

Evet, oldukça mümkün. Gördüğünüz gibi, PHP doğaüstü hiçbir şey kullanmaz - tanımlayıcı, tanımlama bilgileri kullanılarak istekler arasında kaydedilir, oturum verileri sunucudaki dosyalarda saklanır.

Örneğin, popüler CodeIgniter çerçevesi, oturumlarla çalışmak için kendi mekanizmasına sahiptir.

Oturum mekanizması ne kadar güvenli?

Bir oturum yalnızca benzersiz bir oturum tanımlayıcısı tarafından tanımlanır, bu nedenle genel olarak bir saldırganın sunucunun kafasını karıştırmak için yalnızca oturumu çalması gerekir. Yukarıda kullandığımız test scriptini ele alalım. Farklı bir IP'den erişilecekse (oturumu oluşturan ile ilgili olarak), ancak PHPSESSID aynı şekilde iletilecekse, oturum başarıyla geri yüklenecek ve sayaç önceki kaydedilen değerden artacaktır.

Sağlamak ek koruma Sen kendin. Örneğin:

  • İstemcinin IP ve Kullanıcı-Aracı oturumlarını oturum verilerine kaydedebilir (sunucu tarafında saklanacaktır) ve ardından her aramada mevcut değerlerin kayıtlı değerlerle eşleşip eşleşmediğini kontrol edebilirsiniz. Bu durumda, güvenlik ve kullanıcı deneyimi arasında bir uzlaşma bulmanız gerekir.

    Örneğin, bir kullanıcının dinamik IP'si varsa ve yetkilendirmeyi sürdürmek için oturumları kullanıyorsanız, ancak aynı zamanda IP eşleşmesini kontrol ediyorsanız, adres her değiştiğinde, kullanıcının kullanıcı adını ve şifreyi yeniden girmesi gerekecektir.

    Benzer şekilde, User-Agent dizesi, tarayıcı sürümünü güncellerken veya bazı eklentileri yüklerken değişebilir.

  • Önerilen oturum koruma mekanizmalarından biri, betik her çağrıldığında tanımlayıcıyı yeniden oluşturmaktır (session_regenerate_id işlevine bakın). Çalışmanın senaryosunu ve algoritmasını aşağıdaki bağlamda görebilirsiniz.

    Not. Resmi web sitesindeki tartışmaya inanıyorsanız, tanımlayıcı yeniden oluşturulduğunda eşzamanlı veri erişimiyle ilgili sorunlar ortaya çıkabilir.

Bağlamda tanımlayıcının yeniden oluşturulmasıyla oturumların çalışması

Senaryo


// Blok 1
oturum_başlangıç();
Eğer(isset($ _SESSION ["başlatıldı"]))
session_regenerate_id();
Başka
$ _SESSION ["başlatıldı"] = doğru;

// blok 2
Eğer(isset($ _SESSION ["görüntüleme"]))
$ _SESSION ["görüntüleme"] ++;
Başka
$ _SESSION ["görüntüleme"] = 1;

// blok 3
Eko"
< body>
Görüntüleme sayısı: ". $ _SESSION [" görüntüleme "]."

" ;

?>

Bildiğin üzere, HTTP protokolü web uygulamalarının "oturumlar" oluşturmasına izin verir - bir istemci ve bir sunucu arasında bir diyalog ve bu diyalogun durumu istekten talebe korunur.

Web programlamanın ana dili olan PHP dili, oturum verilerini düzenlerken ve depolarken endişelerin çoğunu üstlenerek HTTP oturum mekanizmasını kullanma yeteneği sağlar. HTTP oturum mekanizmasının çalışması için neyin gerekli olduğunu size hatırlatmama izin verin:

  • Sunucu benzersiz bir oturum numarası oluşturmalıdır.
  • Oturum numarası müşteriye iletilmelidir (genellikle Çerezler aracılığıyla).
  • Sunucu, istemcinin sonraki isteklerde sunucuya gönderdiği oturum numarasını (ayrıca Çerezler aracılığıyla) bilerek, geri yüklenebilmesi için oturum verilerini dosyalara veya bir veritabanına kaydedebilmelidir.

Aslında bir PHP programında oturum mekanizmasının çarklarının dönmesi için yapılması gereken tek işlem tek bir işlevi çağırmak: session_start(). Bu işlev gerekli tüm adımları gerçekleştirir:

  • İstemcinin Çerezde veya istek parametrelerinde zaten mevcut bir oturum numarası gönderip göndermediğini kontrol eder. İstemci bir oturum numarası gönderdiyse, bu oturumun verileri kalıcı bir depolama konumundan (örneğin bir dosya) belleğe yüklenir ve $ _SESSION dizisi aracılığıyla program tarafından kullanılabilir hale gelir. İstemci bir oturum numarası göndermediyse veya sunucuda böyle bir oturum yoksa, yeni bir numarayla yeni bir oturum oluşturulur ve verileri ayrıca $ _SESSION dizisi aracılığıyla kullanılabilir, bu durumda boş olacaktır. yeni bir seans. Yeni oluşturulan oturumun numarası, Set-Cookie sunucu yanıtının başlık alanına yerleştirilir.
  • Oturum verilerinin kaydedilmesini sağlar. PHP programı isteği işledikten sonra, Mevcut durum$ _SESSION dizisi, bir sonraki istemci isteğinde yeniden kullanılabilir olması için kalıcı bir konumda depolanır.

Artık session_start()'ın arkasındaki detayları bildiğimize göre, bu mekanizma ile oynayabiliriz. Aşağıdaki örnek, oturumda her müşteri isteğiyle bir artan bir sayı saklar:

Bu sayfayı ilk ziyaret ettiğinizde, sunucu tarayıcıya oturum numarasını içeren bir tanımlama bilgisi gönderir:

Set-Çerez: PHPSESSID = 4ftvca7jmmnm04q95r3sdsk6r6; yol = /

Tarayıcı, sonraki her istekte aynı oturum numarasını sunucuya geri gönderir. Şimdi, tarayıcıda çerezleri temizlerseniz, sunucuda farklı bir numara ile yeni bir oturum oluşturulacak ve test komut dosyamızdaki hesap baştan başlayacaktır.

Daha gerçek bir örnek: kullanıcı adı

Çoğu zaman, bir kullanıcı siteye giriş yaptığında oturumlar kullanılır. Siteye girerken, kullanıcı, sunucunun kontrol ettiği bir kullanıcı adı ve şifre girer. Oturum açma doğruysa, sunucu, artık bir parola ile oturum açmayı istememek için kullanıcının oturumdaki verilerini hatırlamalıdır. En basit durumda, aşağıdaki örneği alırsınız:

dizi ("şifre" => "123", "başlık" => "Yönetici",), "kullanıcı" => dizi ("şifre" => "qwe", "başlık" => "Kullanıcı",),) ; iade isset ($ kullanıcı [$ giriş])? $ kullanıcı [$ oturum açma]: null; ) function getCurrentUser () ($ user = isset ($ _ SESSION ["user"])? $ _SESSION ["user"]: null; $ user döndür;) function setCurrentUser ($ user) ($ _SESSION ["user"] = $ kullanıcı;)?>

Hey,!
Bağlantı1 Bağlantı2

Oturumu KapatHenüz siteye girmediniz. Giriş ve şifreyi girin:
Giriş yapmak: Parola:

Bu program bir kullanıcı adı ve şifre ister ve bir kullanıcı adı ile girebilirsiniz. kullanıcı, qwe veya yönetici, 123 ... Oturum açan kullanıcıya bir karşılama mesajı gösterilir. Giriş yaparken, kullanıcı adı veya şifre yanlışsa bir mesaj görüntülenir.

Bu "siteye" girmeyi başarır sağlamaz, oturum açmış bir kullanıcı olarak kalırken bağlantılara (Link1, Link2) tıklayabilirsiniz.

Bir oturumda hangi veriler saklanabilir?

İle varsayılan PHP oturum verilerini metin olarak geçici bir dosyada saklar. Geçici ile dizine bakarak bunu doğrulayabilirsiniz. PHP dosyaları... Bu dizin phpinfo () içinde Environment, TEMP altında listelenmiştir. Bu dizinde sess_ gibi dosyalar bulacaksınız. 4ftvca7jmmnm04q95r3sdsk6r6 burada 4ftvca7jmmnm04q95r3sdsk6r6 Çerezde geçirilen oturum numarasıdır. Bu dosyaya bir göz atın: Yukarıdaki ilk örneği çalıştırırsanız, dosya yaklaşık olarak şu içeriği içerecektir: "değer | i: 2;". Bu metin, yalnızca bir sayı ile bir değişkenin depolandığı oturum içeriğinin serileştirilmiş bir temsilidir.

PHP programının $ _SESSION dizisi aracılığıyla oturuma koyduğu tüm değerler, oturum kaydedildiğinde metin biçimine dönüştürülür ve ardından bir dosyaya yazılır. Değişken değerleri metne dönüştürme işlemine "seri hale getirme" denir. Böylece, PHP'nin serileştirme yeteneğine sahip olduğu herhangi bir veri bir oturuma yerleştirilebilir.

Neyse ki, PHP'de sadece daha fazlasını seri hale getirebilirsiniz. basit değerler sayılar ve dizeler gibi, aynı zamanda diziler ve nesneler gibi karmaşık yapılar:

"; print_r ($ _ OTURUM); yankı""; $ _SESSION [" testArray "] = dizi (1, 2, 3," bir "," iki "," üç "," alt "=> dizi (5, 6, 7),); $ nesne = yeni stdClass (); $ nesne-> x = 1234; $ nesne-> y = 4567; $ _SESSION ["testObject"] = $ nesne;

Bu örnek, oturum dosyasına aşağıdaki verileri yazacaktır:

TestArray | a: 7: (i: 0; i: 1; i: 1; i: 2; i: 2; i: 3; i: 3; s: 3: "bir"; i: 4; s: 3 : "iki"; i: 5; s: 5: "üç"; s: 5: "çocuk"; a: 3: (i: 0; i: 5; i: 1; i: 6; i: 2; i: 7;)) testObject | O: 8: "stdClass": 2: (s: 1: "x"; i: 1234; s: 1: "y"; i: 4567;)

Nesneleri bir oturumda saklama

Gördüğünüz gibi, nesneler bir oturumda saklanabilir. Ancak, "self-made" sınıflarınıza veya sınıflarınızın nesne-instance'larına herhangi bir şekilde atıfta bulunan nesneleri oturumda saklarken, bu sınıfların bildiriminin session_start çağrısından önce yapılması gerektiği unutulmamalıdır. (). Diğer bir deyişle, oturum verilerinin serisini kaldırırken PHP'nin ondan söz edilmeden önce sınıfı bilmesi gerekir.

Nesneleri kaydederken, bir nesnenin standart serileştirilmesinin herhangi bir nedenle kabul edilemez veya hatta imkansız olduğu durumlar vardır. Bu gibi durumlarda, sınıfta sihirli __sleep() ve __wakeup() yöntemlerini bildirerek serileştirmeyi manuel olarak uygulayabilirsiniz.

bu arada, serileştirme "manuel" olarak yapılabilir ve oturum verilerinin kaydedilmesi / yüklenmesi gerekli değildir. Bu, uygulamadaki bazı verilerin daha sonra kullanılmak üzere kaydedilmesi veya ağ üzerinden aktarılması gerektiğinde gerekli olabilir. Serileştirme/serileştirme için yararlı olabilecek işlevler serialize(), unserialize(), json_encode(), json_decode() işlevleridir.

Bir oturumda neler saklanamaz?

Bir oturum, serileştirilemeyen bir şeyi depolayamaz. Herhangi bir PHP kaynağı, böyle bir varlığa örnek teşkil edebilir. Kaynaklar ağ bağlantıları, açık dosya tanımlayıcıları, veritabanı bağlantıları ve diğer bazı nesnelerdir. Bir PHP kaynağı, programdan doğrudan erişilemeyen, ancak çeşitli PHP işlevleri çağrılarak manipüle edilebilen PHP'nin derinliklerindeki dahili bir nesneye referanstır. İçeriği serileştirilemeyen ve serileştirilmemesi gereken bir tür "kara kutu".

Ek özellikler

PHP, geliştiriciye, örneğin bir veritabanında oturum verilerini depolamak için kendi yolunu uygulama yeteneği sağlar. Bunu yapmak için, kalıcı bir depolama konumundan oturum verilerini kaydedecek ve yükleyecek işlevleri uygulamanız gerekir. Ardından, işlevi çağırarak PHP'ye bu işlevler hakkında bilgi vermeniz gerekir. session_set_save_handler.

Çok yüklü sitelerde oturum verilerini kaydetme ve yükleme sürecini hızlandırmak için verileri bellekte depolayan bir Memcached sunucusu kullanılabilir. Bu oturum saklama yöntemi desteği PHP'de yerleşiktir ve php.ini yapılandırma dosyası aracılığıyla yapılandırılır.

Oturum numarasının iletildiği çerez parametresinin adını, adını, ömrünü, etki alanını ve diğer parametreleri belirterek ayarlayabilirsiniz.

PHP'de HTTP oturumlarını özelleştirmek için bu ve diğer birçok seçenek, session_ * işlevleri aracılığıyla kullanılabilir.

PHP'deki oturumlar veya siteye giren bir kullanıcı veya müşteri hakkındaki verilerin, sitenin sayfaları arasında gezinirken çok fazla zorlanmadan nasıl kaydedildiği. Ders çok önemlidir. Sitelerin %95'inin oluşturulmasıyla ilgilidir.

php'de oturum nedir

Oturumlar, aynı sitenin sayfaları arasında gezinirken geçici veriler (örneğin, kullanıcının siteye girdiği) hakkındaki bilgileri depolamak için kullanılır. Oturumları kullanırken, veriler sunucudaki geçici dosyalara kaydedilir.
Çoğu zaman oturumlar (ve bu arada çerezler de) çevrimiçi mağazalar, forumlar, mesaj panoları, sosyal ağlar, bloglar ve diğer kaynaklar oluşturulurken kullanılır. Oturum sisteminin rahatlığı, oturum açmış olan kullanıcının/müşterinin geçici bilgilerinin, verileri belirli bir süre için hızlı erişimde saklanmasından ibarettir. Oturumun doğal bir sona erme tarihi vardır - tarayıcı kapanana kadar. Yalnızca sayfayı kapatırsanız, siteyi açtığınızda, kullanıcı / alıcı ile ilgili veriler yine mevcut olacaktır.

Oturum mantığı

Oturum (veya oturum) bir tür geçici veri depolamadır. Sizi hemen uyarıyorum, az miktarda veri kaydetmeye değer. Örneğin, oturum açan kullanıcının oturum açma adı ve parolası veya veritabanındaki seri numarası.

iş örneği
1. Kullanıcı bir kullanıcı adı ve şifre girer ve siteye girer
2. Giriş ve şifre ile veriler, sitenin sayfalarından birinin oturumuna kaydedilir:

Dosya index.php

Oturum_başlangıç(); // oturum verilerini kullanmak istediğiniz her dosya, kodun başında "oturum başlat" komutunu içermelidir

$ giriş = "yönetici";
$ şifre = "geç";
$ _SESSION ["giriş"] = $ giriş; // oturum açmayı içeren değişkeni kaydedin
$ _SESSION ["şifre"] = $ şifre; // şifreyi içeren değişkeni kaydet

3. Sitenin başka bir sayfasına gittiğinizde bu veriler de mevcut olacaktır:

Dosya örnek.php(veya başka bir sayfa)

Echo "Giriş bilgileriniz" $ _ SESSION ["giriş"]; // Bu sayfada veri kaydetmemiş olmamıza rağmen, "Girişiniz admin" görüntülenecektir!
Bak, çok basit!

4. Oturum verilerini temizlemek istiyorsanız, bu yeterlidir:

Dosya örnek.php

Oturum_başlangıç(); // "oturumu yeniden başlat"

Ayarlanmadı ($ _ SESSION ["giriş"]); // değişken bu şekilde kayıtlı değil veya "yok edildi"
echo "Giriş bilgileriniz" $ _ SESSION ["giriş"]; // "Oturum açma bilgileriniz" görüntülenecektir. Son satırda yok ettiğimiz için veri de yok.

Session_destroy(); // oturumu yok et. $ _SESSION ["şifre"] dahil tüm veriler gitti. İstendiğinde, bir hata görüntülenecektir
Genel olarak, böyle bir aktarım POST yöntemine benzer, ancak artık çok fazla gereksiz kod yazmanıza gerek yok ve sayfadan sayfaya aktarılan tüm veriler sunucudaki geçici dosyalarda saklanır. Yine, oturumlar az miktarda veri içermelidir, bu nedenle kullanıcı adı / şifre, alışveriş sepeti ve diğer küçük hacimleri depolamak için uygundur.

PHP oturumu kullanarak bir değer veya dizi geçirme

Bir oturumda, yalnızca bir dize değil, aynı zamanda bir dizi veri de yazabilirsiniz. Sadece dizinin boyutuyla aşırıya kaçmayın, çünkü tüm bunlar sunucudaki performansı ve işgal edilen alanı etkileyecektir.

Yine belirli bir başlangıç ​​sayfası kullanıyoruz index.php

Oturum_başlangıç();

$ r = dizi ("bir", "iki", "üç");

$ _SESSION ["dizi"] = $r;

Her şeyin görüntülendiği sayfaya
Verileri oturumda kaydettik ve tüm verileri göstereceğimiz başka bir sayfanın bağlantısını takip ettik.

Dosya alıcısı, sayfa test.php diziyi nerede açıyoruz

Oturum_başlangıç();
print_r ($ _ OTURUM ["dizi"]);
// çıktı alacak
/*
Sıralamak
=> bir
=> iki
=> üç
*/
?>
Bir öğretici üzerinde tazelemek isteyebilirsiniz. Genel olarak, her şey açık olmalıdır.

Oturumlarla çalışmak için diğer işlevler

session_unregister (dize)- oturum belirtilen global değişkenin değerini unutur;
session_destroy ()- oturum kapatılır (örneğin, kullanıcı sistemden çıkış düğmesine basarak sistemden ayrıldıysa);
session_set_cookie_params (int ömür boyu [, string yolu [, string etki alanı]])- bu işlevi kullanarak, oturumun ölüm zamanını belirleyen unix_timestamp ayarını yaparak oturumun ne kadar süreceğini ayarlayabilirsiniz.

PHP'de oturumlarla (oturum) çalışmak için işlevlerin listesi
session_cache_expire - Geçerli önbelleğin sona erme tarihini döndürür
session_cache_limiter - Geçerli önbellek sınırını al ve/veya ayarla
session_commit - session_write_close () için bir takma ad
session_decode - Dizedeki oturum verilerinin kodunu çözer
session_destroy - Oturum için kayıtlı tüm verileri yok eder
session_encode - geçerli oturum verilerini bir dize olarak şifreler
session_get_cookie_params - Oturum tanımlama bilgisi parametrelerini alır
session_id - geçerli oturum kimliğini alır ve/veya ayarlar
session_is_registered - oturumda bir değişkenin kayıtlı olup olmadığını belirler
session_module_name - Geçerli oturum için modülü al ve/veya kur
session_name - geçerli oturumun adını alır ve/veya ayarlar
session_regenerate_id - Mevcut oturum kimliğini yeni oluşturulan ile değiştirir
session_register - geçerli oturum için bir veya daha fazla değişken kaydeder
session_save_path - geçerli oturumu kaydetme yolunu alır ve/veya ayarlar
session_set_cookie_params - oturum tanımlama bilgisi parametrelerini ayarlar
session_set_save_handler - kullanıcı düzeyinde oturum depolama işlevlerini ayarlar
session_start - oturum verilerini başlatır
session_unregister - Geçerli oturumdaki bir değişkenin kaydını siler
session_unset - Tüm oturum değişkenlerini serbest bırakır
session_write_close - Oturum verilerini ve oturumun sonunu yazar

Oturum örnekleri

Oturum sırasındaki sayfa görüntüleme sayacı. Açıklayıcı bir çalışma örneği. Ancak, tarayıcıyı kapattıktan sonra geri sayım yeniden başlayacaktır.

Bir oturumda bir sayfaya yapılan ziyaretlerin sayacı

// Çerezler olmadan oturum kullanmanın basit bir örneği.
oturum_adı ("deneme");
oturum_başlangıç();
$ _SESSION ["sayım"] = @ $ _ SESSION ["sayım"] + 1;
?>

Tezgah


Tarayıcıyla yapılan mevcut çalışma oturumunda bu sayfayı açtınız
zamanlar).
Bu sayacı sıfırlamak için tarayıcınızı kapatın.
Sayfayı yenilemek için buraya tıklayın!
Her geçişte sayaç 1 artacaktır.

İlginiz için teşekkür ederiz! Çalışmalarınızda iyi şanslar!

PHP'deki oturumlar, istemcinin bilgisayarı hakkında sunucu tarafında bilgi depolamak için bir mekanizmadır. Aslında PHP'de oturumlar o kadar da zor bir konu değil ama bunu anlamak için PHP'de çerezlerin nasıl çalıştığını bilmeniz gerekiyor. Bu nedenle, PHP'de çerezlerin nasıl çalıştığını bilmiyorsanız, önce ilgili makaleyi okuyun ve ardından buraya geri gelin.

İngilizce'deki oturum kelimesi oturum olarak çevrilir, bu nedenle PHP'deki oturumların anlamı daha açık hale gelir, ancak "oturumlar" terimi programcılar arasında sıkışmış ve bu makalede kullanacağız.

PHP'deki oturumlar çerez mekanizmasına çok benzer, aynı anahtar => değer çiftleri, sadece sunucu tarafında saklanırlar.

Session_start () işlevi

Oturumu başlatmamız gerekiyor, bunun için session_start() işlevi var. Bu işlev, bir oturumu veya oturumu, adını ne koyarsanız koyun başlatır.

Sayfanın en başında session_start() işlevinin çağrılması arzu edilir, ancak örneklerimde bunu yapmıyorum.

$ _SESSION dizisi

Oturumlar, sunucuda depolanan ancak tek bir benzersiz ziyaretçiye atıfta bulunan değişken gruplarıdır. Yine, bu kilit nokta: oturumlar sunucuda saklanır.

Her ziyaretçinin oturumundan elde ettiği verilerle etkileşimini sağlamak için kullanılır. çerez dosyası, PHP'nin kendisine verdiği oluşturma komutu, bunun için endişelenmenize gerek yok. Bu tanımlama bilgisi yalnızca sunucu için anlamlıdır ve kullanıcı verilerini almak için kullanılamaz.

Sunucuda, oturum verileri şurada saklanır: Metin dosyası ve PHP programında $ _SESSION dizisinde bulunurlar. Bir oturumda bir değişkeni kaydetmek için bu dizide ona bir değer atamanız gerekir.

Son olarak örnekleri kullanmaya başlayalım. Her şey çok basit.

PHP'de Oturumlar değer. ";?>

Şimdi başka bir örnekte $ _SESSION dizisinden değeri almaya çalışalım.

PHP'de Oturumlar

İkinci örnekte session_start () işlevini kaldırırsak, $ _SESSION dizisinin verilerine erişimimizin olmayacağını lütfen unutmayın.

Oturum_kimliği () işlevi

Oturum oluşturulduktan sonra, session_id () işlevini kullanarak benzersiz oturum tanımlayıcısına otomatik olarak erişirsiniz. Bu işlev, oturum tanımlayıcısının değerini hem ayarlamanıza hem de almanıza olanak tanır.

PHP'de Oturumlar

Tarayıcınızın geliştiricileri için araç çubuğuna bakabilirsiniz (bunun için Chrome'da Ctrl + Shift + I tuşlarına basın, ardından Kaynaklar ve orada bir çerez bulacaksınız), bu etki alanı tarayıcınız için PHPSESSID adında bir çerez koydu ve başka bir şey bunun gibi: "7g5df9rkd1hhvr33lq1k6c72p7".

Sunucunun tarayıcınızı belirlemesi ve daha önce bahsedildiği gibi $ _SESSION dizisi aracılığıyla komut dosyası için kullanılabilen uygun değişkenler kümesiyle çalışması PHPSESSID değerine göredir.

Oturum_adı () işlevi

session_id() işlevi, oturum tanımlayıcısının değerini almanıza izin veriyorsa, session_name() işlevi, oturumun adını bulmanızı sağlar.

PHP'de Oturumlar

session_start () işlevi hakkında bir kez daha

Artık PHP'deki oturumların karıştırılması hakkında daha fazla şey biliyoruz ve tekrar session_start() işlevine dönmemiz gerekiyor. Bu işlev, geçerli kullanıcı için oturum mekanizmasını başlatır. Bu tam olarak nasıl oluyor:

  • Kullanıcı siteyi ilk kez başlattıysa, session_start () istemcide bir tanımlama bilgisi ayarlar ve sunucuda kullanıcı kimliğiyle ilişkili geçici bir depolama oluşturur.
  • Geçen geçerli tanımlayıcıyla ilişkili depoyu tanımlar.
  • Sunucuda depolanan veri varsa $ _SESSION dizisine yerleştirilir.
  • php.ini dosyasındaki register_globals On ise, $ _SESSION dizisinin tüm elemanları global değişkenler haline gelir.

Oturum kullanım örneği

Şimdi, oturumlarla biraz deneme yapmanızı sağlayacak bir örneğe bakacağız.

PHP'de Oturumlar

Tezgah

Geçerli oturumda sayfayı açtınızbir Zamanlar.

Örneği "> bu sekmede açın.

Tüm oturum çalışmaları $ _SESSION dizisine dayanmaktadır, bu örnekte bu açıkça görülmektedir.

Tarayıcı penceresini kapatırsanız oturum sonlandırılır, sayacımız sıfırlanır. PHP'deki oturumların bu davranışı değiştirilebilir, bu konuya makalede biraz daha döneceğiz.

oturumun sonu

Seansı bitirmek için şunlara ihtiyacımız var:

  1. $ _SESSION dizisini temizleyin.
  2. Sunucudaki geçici depolamayı silin.
  3. Oturum çerezini silin.

$ _SESSION dizisini session_unset() işlevini kullanarak temizleyebilirsiniz.

session_destroy () işlevi, sunucudaki geçici depolamayı kaldırır. Bu arada, başka bir şey yapmıyor.

PHP'de çerezlerle çalışma dersinde öğrendiğimiz setcookie() işlevini kullanarak oturum çerezini kaldırmanız gerekir.

Oturum sonu örneği:

oturumun sonu

Oturum sona erdi.

Şimdi bir deney yapabilirsiniz: bir pencerede sayaçlı örneği çalıştırın, sayacı kurun ve ardından örneği oturumu silerek çalıştırın ve sayfayı sayaçla tekrar yenileyin.

Bir çerezi silmek şu şekilde yapılabilir:

setcookie (oturum_adı (), "", zaman () - 60 * 60 * 24 * 32, "/")

session_name() ve session_id() fonksiyonları hakkında bir kez daha

session_name() ve session_id() işlevleri pratikte nadiren kullanılır, ancak makalenin PHP'deki oturumların mekanizmasını ortaya koyması gerektiğinden, onlar hakkında yazıyorum.

Bu işlevleri kendi adlarınızı ve oturum kimliklerinizi tanımlamak için kullanabilirsiniz, ancak bu önerilmez. Bunları ayarlamak istiyorsanız, aşağıdaki örnekte olduğu gibi bu işlevleri session_start () işlevinden önce argümanlarla birlikte yazın:

PHP'de Oturumlar

Bu örneği kullanarak, tüm kullanıcılara aynı oturum kimliği atanacaktır.

Burada daha ayrıntılı duralım, session_name () işleviyle ilgili bölümdeki örneği (bağlantı burada) farklı tarayıcılarda (örneğin, Chrome ve Internet Explorer'da) çalıştırırsanız, her tarayıcının kendi benzersiz oturumu olacaktır. tanımlayıcı. Tarayıcılar tanımlama bilgilerini her biri kendi klasörlerinde depolar, bu nedenle session_start () işlevi her tarayıcıya kendi benzersiz tanımlayıcısını verir ve buna göre her tarayıcı için sunucuda benzersiz bir depolama alanı oluşturulur. Bu nedenle, sayaç örneği (bu) her tarayıcıda birbirinden bağımsız olarak çalışacaktır.

Tüm kullanıcılar için aynı oturum tanımlayıcısını ayarlarsanız, sunucuda aynı havuzla çalışırlar. Aşağıda, farklı tarayıcılardan gelen ziyaretleri sayacak bir sayaç örneği verilmiştir:

100) (session_unset (); session_destroy ();)?> PHP'de Oturumlar

Sayaç numarası 2

Sayfayı farklı tarayıcılarda açtıbir Zamanlar.

Örneği "> bu sekmede açın.

Bu örneği çalıştırırsanız, orada bir birim göreceğiniz bir gerçek değil. Diğer ziyaretçiler, sunucudaki oturum deposundaki değerleri zaten değiştirmiş olabilir. Bu durumda sunucu depolamayı ne zaman sildiğini bilmiyorum, bu yüzden sayaç 100'ü geçerse oturumu sonlandıracağım.

Bekleme süresinin ayarlanması

Varsayılan olarak, oturum, ziyaretçi tarayıcı penceresini kapatana kadar "yaşar". Bunun nedeni, session_start() işlevinin istemciye böyle bir tanımlama bilgisi ayarlamasıdır.

Oturum ömrü session_set_cookie_params() işlevi kullanılarak değiştirilebilir, işte sözdizimi.

session_set_cookie_params (int ömür boyu [, string yolu [, string etki alanı [, güvenli güvenli]]])

Pratikte sadece ilk parametreyi (ömür boyu) kullanmak yeterlidir, burada sunucunun tarayıcıyı kapattıktan sonra oturum durumunu ne kadar hatırlaması gerektiğini belirleyen süreyi saniye cinsinden yazarsınız.

session_set_cookie_params() işlevi yalnızca betiğin süresi için geçerlidir.

İşte bu işlevi kullanan bir örnek:

PHP'de Oturumlar

Sayaç No. 3

Sayaç değeri:.

"> bu sekmede sayacı açın.

Sayacı sarın ve tarayıcıyı kapatın, 30 saniye sonra bu örneği tekrar açın. Oturumunuz kaydedilecektir.