aktif oturum. Facebook Giriş Onayı

  • 03.11.2019

Oturum (Latince - oturum - toplantı, İngilizce - oturumdan), ilk bağlantının açıldığı andan son bağlantıya kadar kullanıcının İnternet üzerindeki çalışmalarını kapsayan bir süredir. İlk ve son istekler arasındaki zaman farkı olarak hesaplanır. Ancak, son sayfa kullanıcı tarafından farklı zamanlarda görüntülenebilir, bu nedenle iki istek arasındaki süreyi ölçmeyi zorlaştırır.

Oturumun HTTP protokolü ve ÇEREZLER ile ilişkisi

Bir oturumun ne olduğu HTTP protokolünden başlayarak açıklanabilir. Kendi başına bu protokol, iki işlem arasında durumu sürdürmenin bir yolunu sağlamaz. Yani, basitçe söylemek gerekirse, bir sayfayı açıp ondan diğerine geçerken HTTP, her iki isteğin de aynı kullanıcıya ait olduğunu belirleyemez. İşte kurtarma - oturum yönetimine (seanslarımız) özel bir izleme yönteminin geldiği yer burasıdır.
Dolayısıyla session nedir sorusuna yanıt olarak, bir kullanıcıdan gelen ardışık HTTP istekleri arasında veri aktarımını kolaylaştıran yardımcı bir mantıksal nesne olduğunu söyleyebiliriz.
Çerezler, oturum gibi, kullanıcı hakkında farklı sayfalarda gezinirken bilgi depolar ve protokolün çalışmasını iyileştirir. Ancak verilerin sunucudaki geçici dosyalarda depolandığı ikincisinden farklı olarak, kullanıcının bilgisayarında küçük parçalar halinde depolanırlar.

Seanslar ne için?

Forumlar, bülten panoları ve İnternet mağazaları gibi sitelerle çalışırken oturumların kullanılması vazgeçilmez hale gelir, çünkü bu durumda kullanıcı verilerini birkaç sayfa için kaydetmeniz gerekir.

Oturum aşamaları

Tüm oturum üç aşamaya ayrılabilir:

  • oturum açma (kullanıcı belirli bir siteyle çalışmaya başladığında),
  • oturum değişkenlerini hesaba katmak (farklı sayfalara giderken),
  • seans sonu.

Oturum verilerinin üçüncü taraf bir sunucuda saklanması nedeniyle, bunlara büyük miktarda bilgi depolamak değil, çerezleri kullanmak en iyisidir.

Oturum modülü, saklanan oturum bilgilerinin yalnızca oturumu oluşturan kullanıcı tarafından kullanılabileceğini garanti etmez. Oturumla ilişkili verilere dayalı olarak oturumun gizliliğini korumak için ek adımlar atılması gerekir.

Oturum içinde iletilen verilerin öneminin değerlendirilmesi, bu bilgilerin korunmasına yönelik önlemlerin seçilmesi açısından önemlidir; her şeyin bir bedeli vardır ve genellikle ek güvenlik önlemleri, zayıf son kullanıcı deneyimine neden olur. Örneğin, kullanıcıyı sosyal mühendisliğin en basit yöntemlerinden korumak istiyorsanız, şunları eklemelisiniz: session.use_only_cookies. Bu durumda kullanıcı yazılımının çerezleri desteklemesi gerekir, aksi takdirde oturum mekanizması çalışmayacaktır.

Mevcut bir oturum kimliğini üçüncü taraflara sızdırmanın birkaç yolu vardır. Örneğin, JavaScript enjeksiyonu, bir URL'de oturum kimliği geçirme, paket koklama, fiziksel cihaz erişimi vb. Yakalanan oturum tanımlayıcısı, üçüncü tarafların bu oturumla ilişkili tüm kaynaklara erişmesine izin verecektir. İlk olarak, oturum kimliğini URL'de geçirin. Harici bir siteye giderken kullanıcının oturum kimliği ve kaynak adresi bu sitenin geçiş istatistiklerine dahil edilebilir. İkincisi, daha aktif bir saldırı ile bir saldırganın ağ trafiğini dinlemesi mümkündür. Veri bağlantısı şifrelenmemişse, oturum tanımlayıcıları düz metin olarak iletilecektir. Bu durumda çözüm, kullanıcıların siteye erişirken SSL/TLS kullanmasını zorunlu kılmaktır. Bu amaçlar için HSTS kullanılmalıdır.

Yorum: HTTPS bile bazen hassas verileri korumada başarısız olabilir. Örneğin CRIME, BEAST gibi güvenlik açıkları bir saldırganın verilere erişmesine izin verebilir. Birçok ağ, denetleme için HTTPS MITM proxy'lerini kullanır. Saldırganlar da bu tür proxy'ler kurabilir.

Uyarlanabilir olmayan oturum yönetimi

PHP şu anda varsayılan olarak uyarlanabilir oturum yönetimini kullanır. Uyarlanabilir oturum yönetimi ek riskler taşır.

PHP 5.5.2'den itibaren session.use_strict_mode seçeneği mevcuttur. Etkinleştirildiğinde ve oturum kalıcılık işleyicisinin desteklemesi koşuluyla, başlatılmamış oturum kimliği atılır ve yenisi oluşturulur. Bu, kullanıcıyı bilinen bir kimliği kullanmaya zorlayan saldırılara karşı koruma sağlar. Saldırgan, oturum kimliğini içeren bağlantılar veya e-postalar gönderebilir. Örneğin http://example.com/page.php?PHPSESSID=123456789 . session.use_trans_sid seçeneği etkinleştirilirse, kurban bu kimlikle bir oturum açar. session.use_strict_mode seçeneği bu riski azaltır.

Dikkat

Kullanıcı tanımlı kalıcılık işleyicisi, oturum kimliğinin geçerli olup olmadığını kontrol etmek için bir işlev/yöntem uygulayarak katı oturum modunu da destekleyebilir. Tüm kullanıcı tanımlı kaydetme işleyicileri bunu uygulamalıdır.

Oturum kimliği tanımlama bilgisi, etki alanı, yol, httponly, güvenli parametreler ve PHP 7.3'ten itibaren SameSite özniteliği ile ayarlanmalıdır. Önceliği tarayıcılar tarafından belirlenir. Bu önceliğe bağlı olarak, bir saldırgan süresiz olarak kullanılacak bir oturum kimliği belirleyebilir. session.use_only_cookies kullanmak bu sorunu çözmez. session.use_strict_mode riski azaltır. session.use_strict_mode =Açık, başlatılmamış oturum kimliklerinin kullanımına izin vermez.

Yorum: session.use_strict_mode azaltılmış olsa bile, bir saldırganın bir kullanıcıyı, bir saldırgan tarafından oluşturulmuş, önceden başlatılmış bir oturumu kullanmaya zorlaması yine de mümkündür. Örneğin JavaScript enjeksiyonu. Bu kılavuzdaki yönergeler izlenerek bu saldırı hafifletilebilir. Bu kılavuzu izliyorsanız, session.use_strict_mode öğesini etkinleştirmeli, zaman damgası tabanlı oturum yönetimini kullanmalı ve oturum kimliğini şununla yeniden oluşturmalısınız. session_regenerate_id() tavsiye edildiği gibi. Tüm bunları yaparsanız, saldırganın oturum kimliği sonunda silinecektir. Süresi dolmuş bir oturuma erişilirse, tüm aktif kullanıcı oturum verilerini kaydetmeniz gerekir. Bu, olanların nedenlerine ilişkin daha fazla araştırma yapılmasına izin verecektir. Bundan sonra, kullanıcıyı tüm etkin oturumlardan çıkış yapmaya zorlayın, yani kullanıcıların yeniden yetkilendirmesini isteyin. Bu, çalınan bir oturum kullanan bir saldırıyı önleyecektir.

Dikkat

Süresi dolmuş bir oturuma erişim, her zaman bir saldırı anlamına gelmez. Kararsız bir ağ bağlantısı ve/veya etkin bir oturumun hemen silinmesi bu davranışa neden olabilir.

PHP 7.1.0'dan itibaren işlev eklendi session_create_id(). Bu özellik, daha fazla yönetilebilirlik elde etmek için kullanıcı kimliğini önek olarak kullanarak bir oturum kimliği oluşturmak için faydalı olabilir. Kullanırken, session.use_strict_mode'a izin vermek son derece önemlidir. Aksi takdirde, vicdansız kullanıcılar, diğer kullanıcılar için sahte oturum kimlikleri ayarlayabilecektir.

Yorum: 7.1.0'dan önceki PHP sürümlerinde, bir CSPRNG, yani /dev/urandom veya rastgele_bayt() ve yeni bir oturum kimliği oluşturmak için karma işlevler. session_create_id() yerleşik çarpışma algılama işlevine sahiptir ve INI ayarlarına dayalı bir tanımlayıcı oluşturur. kullanım session_create_id() tercih edilen uygulamadır.

Oturum kimliğini yeniden oluşturma

Dikkat

Bu ayar, session.use_strict_mode'un etkinleştirilmesini gerektirir. Bu seçeneğin etkinleştirildiğinden emin olun, aksi takdirde etkin oturumların veritabanı tehlikeye girebilir.

Eski oturumları tespit etmek için zaman damgasına dayalı oturum yönetimi zorunludur. Eski bir oturuma erişme girişimi algılanırsa, tüm etkin kullanıcı oturumları için yetkilendirme bayraklarını sıfırlamanız gerekir.

Oturumlar ve otomatik oturum açma

Geliştiriciler, otomatik oturum açmayı uygulamak için uzun süreli oturumlar KULLANMAMALIDIR, çünkü bu, oturum hırsızlığı olasılığını önemli ölçüde artırır. Otomatik oturum açma geliştiricinin kendisi tarafından gerçekleştirilmelidir.

Tek seferlik güvenli karma anahtarları otomatik oturum açma anahtarları olarak ayarlayın çerez(). SHA-256 veya üstü gibi SHA-2'den daha güçlü güvenli karma kullanın. rastgele_bayt() veya /dev/urandom.

Kullanıcı yetkili değilse, tek seferlik otomatik oturum açma anahtarının doğru olup olmadığını kontrol edin. Anahtar doğruysa, kullanıcıyı yetkilendirin ve onun için tek seferlik yeni bir anahtar yükleyin. Otomatik oturum açma anahtarı bir kerelik olmalıdır, yani asla tekrar kullanmayın, her zaman yeni bir tane oluşturun.

Otomatik oturum açma anahtarı çok uzun ömürlü bir yetkilendirme anahtarıdır. Maksimum düzeyde korunmalıdır. Çerezin güvenliğini sağlamak için ayarlarken path/httponly/secure/SameSite seçeneklerini kullanın. Otomatik oturum açma anahtarını gerekmedikçe asla paylaşmayın.

Geliştirici, otomatik oturum açmayı devre dışı bırakan ve bunu uygulamak için ayarlanan gereksiz çerezleri kaldıran işlevsellik uygulamalıdır.

CSRF (Siteler Arası İstek Sahteciliği)

output_add_rewrite_var() CSRF'ye karşı korumak için kullanılabilir. Ayrıntılar için kılavuzu okuyun.

Yorum: PHP 7.2.0'dan önce, "trans sid" için aynı çıktı arabelleği ve INI ayarları kullanılıyordu. Yani kullan output_add_rewrite_var() PHP'nin önceki sürümleri ile tavsiye edilmez.

Birçok çerçeve CSRF korumasını destekler. Daha fazla ayrıntı için çerçevenizin belgelerine bakın.

PHP 7.3'ten itibaren, oturum tanımlama bilgisi SameSite özniteliğine ayarlanabilir. Bu, CSRF'ye karşı ek koruma sağlayacaktır.

Modülde Aktif oturumlar o anda kontrol paneliyle çalışan kullanıcıların listesini, kullanıcının eriştiği IP adresini ve bu kullanıcıdan son komutun alınmasından bu yana geçen süreyi istediğiniz zaman görüntüleyebilirsiniz.

Gerekirse, seçilen kullanıcının oturumunu sonlandırabilirsiniz.

Modül "Aktif oturumlar"

Mevcut bağlantılar hakkındaki bilgileri görüntüleyin

  • oturum kimliği- kontrol paneli ile oturumu tanımlayan benzersiz bir numara. Varsayılan olarak, bilgiler tabloda 60 dakika boyunca görüntülenir.
  • kullanıcı- sisteme şu anda bağlı olan kullanıcının adı.
  • Erişim- verilen kullanıcının kontrol paneline erişim düzeyi (örneğin, süper kullanıcı, sunucu yöneticisi, kullanıcı vb.).
  • IP adresi- erişimin gerçekleştirildiği uzak IP adresi.
  • beklenti- kontrol panelinin kullanıcıdan son komutu almasından bu yana geçen süre.
  • Etkin İstekler- aktif isteklerin sayısı.

Bir oturumu sonlandırma

Kontrol paneli ile belirli bir çalışma oturumunu sonlandırmak için, aktif oturumlar listesinden gerekli satırları seçin ve "Son" düğmesini tıklayın.

Yanlışlıkla silmeleri önlemek için kontrol paneli sizden işleminizi onaylamanızı veya iptal etmenizi isteyecektir. Onay penceresinde "Tamam"a tıklarsanız, seçilen oturumlar sonlandırılacaktır.

Oturum sonlandırıldıysa, kontrol paneliyle çalışmaya devam etmek için kullanıcının tekrar oturum açması gerekir.

Bu form bir destek bileti değildir.
Sizi tanımlayamayız ve mesajınıza yanıt veremeyiz.

Web sunucusu, istemciyle kalıcı bir bağlantı kurmaz ve her istek, öncekilerle herhangi bir bağlantı olmaksızın yeni bir istek olarak işlenir.
Yani, aynı ziyaretçiden gelen istekleri izleyemez veya bunun için değişkenleri ayrı sayfa görünümleri arasında depolayamazsınız. Bu iki sorunu çözmek için oturumlar icat edildi.
Aslında, kısaca oturumlar, bir tarayıcıyı benzersiz bir şekilde tanımlamanıza ve sunucuda oturum değişkenlerini depolayan bu tarayıcı için bir dosya oluşturmanıza olanak tanıyan bir mekanizmadır.

Böyle bir mekanizmaya duyulan ihtiyacı ayrıntılı olarak açıklamayacağım. Bunlar, bir e-mağazadaki alışveriş sepeti, yetkilendirme ve örneğin bir sitenin etkileşimli bölümlerini spam'den korumak gibi önemsiz problemler gibi ders kitabı durumlarıdır.

Prensipte, yerleşik PHP kadar işlevsel değil, özünde benzer olan kendi oturum analogunuzu yapmak oldukça kolaydır. Çerezler ve veritabanı hakkında.
Bir komut dosyası talep ederken, belirli bir ada sahip bir çerezin gelip gelmediğine bakarız. Çerez yoksa, onu ayarlıyoruz ve veritabanına kullanıcı verileriyle yeni bir satır yazıyoruz. Bir çerez varsa, veritabanından okuruz. Başka bir istek ile eski kayıtları veritabanından siliyoruz ve artık oturum mekanizmasını hazır hale getiriyoruz. Oldukça kolay. Ancak yerleşik oturum mekanizmasını kullanmayı tercih eden bazı nüanslar vardır.

Yalnızca ilki etkinleştirilirse, oturumun başında (her aramada oturum_başlangıç()) istemciye bir çerez ayarlanır. Tarayıcı, sonraki her istekte bu tanımlama bilgisini doğru şekilde döndürür ve PHP'nin bir oturum kimliği vardır. Tarayıcı çerezleri döndürmezse sorunlar başlar. Bu durumda, tanımlayıcıya sahip bir çerez almadan PHP her zaman yeni bir oturum başlatacak ve mekanizma çalışmayacaktır.

Yalnızca ikincisi etkinleştirilirse, çerez ayarlanmaz. Ve bunun uğruna, temelde, aslında, yerleşik oturum mekanizmasını kullanmaya değer. Komut dosyası işini yaptıktan ve sayfa tamamen oluşturulduktan sonra, PHP hepsini tarar ve her bağlantıya ve her forma oturum tanımlayıcısının aktarımını ekler. Şuna benziyor:
dizin dönüşür
dizin
Formlara gizli alan ekleme

Ve tarayıcı, herhangi bir bağlantıya tıkladığınızda veya formdaki bir düğmeye tıkladığınızda, istekte ihtiyacımız olan değişkeni - oturum kimliğini gönderir!
Açık nedenlerle, kimlik yalnızca göreli bağlantılara eklenir.

Teorik olarak, çerezler ve veritabanı konusunda sizinle yaptığımız kendi kendine yapılan oturumlarımızda, kimliğin transferini tüm bağlantılara manuel olarak atfedebilirsiniz - ve sonra kendi oturumlarımız çerezlerden bağımsız olarak çalışacaktır. Ama görüyorsun, başka birinin bu işi yapması daha mı hoş? ;-)

Her iki seçenek de PHP'nin son sürümlerinde varsayılan olarak etkindir. PHP bu durumda nasıl davranır? Çerez her zaman ayarlanmıştır. Bağlantılar yalnızca, PHP oturum kimliği tanımlama bilgisini bulamazsa otomatik olarak tamamlanır. Bir kullanıcı bu oturumda siteyi ilk kez ziyaret ettiğinde, bir çerez ayarlanır ve bağlantılar tamamlanır. Bir sonraki istekte, çerezler destekleniyorsa, PHP çerezi görür ve bağlantıları doldurmayı durdurur. Çerezler çalışmazsa, PHP, kimliği doğru şekilde bağlantılara eklemeye devam eder ve oturum kaybolmaz.
Çerezleri çalıştıran kullanıcılar, id ile uzun bağlantıyı yalnızca bir kez görecektir.

Vay canına. Tanımlayıcının aktarılmasıyla tamamlandı.
Artık geriye, sunucu tarafında veri bulunan bir dosyayı bağlamak kalıyor.
PHP bizim için yapacak. Yazmak yeterince kolay
oturum_başlangıç();
$_SESSION [ "test" ]= "Merhaba dünya!" ;

PHP bu oturumla ilişkili dosyaya test değişkenini yazacaktır.
Burada çok önemli bir not var.
dizi $_SESSION- özel.
İçinde aslında, çeşitli betiklerde kullanıma sunmak istediğimiz değişkenler var.
Bir oturuma bir değişken yerleştirmek için onu $_SESSION dizisinin bir elemanına atamak yeterlidir.
Değerini elde etmek için - sadece aynı öğeye bakın. Aşağıda bir örnek olacak.

Çöp toplama - eski PHP dosyalarının kaldırılması da kendi başına gerçekleştirilir. Veri kodlamanın yanı sıra bir sürü başka gerekli şey. Bu bakımın sonucu olarak seanslarla çalışmak oldukça basittir.
Burada, aslında, oturumların çalışması örneğine geldik.
Örnek çok küçük:
oturum_başlangıç();

Eko "Bu sayfayı güncellediniz". $_SESSION[ "sayaç" ]++. " bir Zamanlar. " ;
Eko "
Güncelleme" ;
?>

Oturumda bir sayaç değişkenimiz olup olmadığını kontrol ediyoruz, yoksa 0 değeri ile oluşturup değerini görüntüleyip bir artırıyoruz. Artan değer oturuma yazılacak ve komut dosyası bir sonraki çağrıldığında değişken 1 değerine sahip olacak ve bu böyle devam edecek.
Her şey çok basit.

Sitenin herhangi bir sayfasındaki oturum değişkenlerine erişebilmek için oturuma ihtiyaç duyduğumuz HER dosyanın en başına SADECE BİR (!) satır yazmanız gerekir:
oturum_başlangıç();
Ardından $_SESSION dizisinin öğelerine erişin. Örneğin, bir yetkilendirme kontrolü şuna benzer:
oturum_başlangıç();
if ($_SESSION[ "yetkili" ]<> 1 ) {
header("Konum: /auth.php");
çıkış;
}

Değişkenleri oturumdan kaldırma.
register_globals=off varsa, yazmanız yeterlidir
unset($_SESSION[ "var" ]);
O zaman değilse yanında onunla yazmak
session_unregister("var");

PHP'nin oturumlarla çalışmaya çalışırken oluşturduğu en yaygın hatalar şunlardır:
İkisi
Uyarı: Oturum çerezi gönderilemiyor - üstbilgiler zaten gönderildi
Uyarı: Oturum önbellek sınırlayıcısı gönderilemiyor - üstbilgiler zaten gönderildi

aynı nedenden kaynaklanıyor, çözüm bu sahtekarlıkta anlatılıyor
üçüncü,
Uyarı: open(/tmp\sess_SID, O_RDWR) başarısız oldu: Satır numarasında full_script_path içinde böyle bir dosya veya dizin (2) yok(önceden benziyordu Uyarı: Oturum verileri (dosyalar) yazılamadı. Lütfen session.save_path'in mevcut ayarının doğru olduğunu doğrulayın (/tmp)),
İngilizce'den çevrilmişse, sorunu ayrıntılı olarak açıklar: php.ini'de belirtilen dizinin yolu, oturum dosyalarının yazıldığı mevcut değildir. Bu hata, düzeltilmesi en kolay olanıdır. Sadece var olan ve yazılabilir bir dizin yazın, örneğin,
session.save_path = c:\windows\temp
Ve bundan sonra Apache'yi yeniden başlatmayı unutmayın.

Görünüşe göre, insan yaratıcılığının sınırı yoktur ve bu nedenle açıklamak zorundayım:
üçüncü hata mesajı (dizin bulunamıyor) KESİNLİKLE ilk ikisiyle sonuçlanacaktır, çünkü hata mesajı tarayıcıya gönderilir ve bundan sonra başlıklar kullanılamaz. Bu nedenle, erken bir sonuç aramak için acele etmeyin, önce doğru yolu yazın!

Oturumlarla ilgili bir sonraki en yaygın sorun, register_globals'ın ağır mirasıdır. $_SESSION dizisinin dizinleriyle eşleşen komut dosyası değişkenleri adları VERMEYİN!
register_globals=on ile değerler birbirinin üzerine yazar ve kafanız karışır.
Ve register_globals=off ile başka bir hata görünecektir: "Komut dosyanız muhtemelen PHP 4.2.3'e kadar var olan bir oturum yan etkisine dayanıyor.", komut dosyasında değeri olmayan bir oturum değişkeni ve global bir oturum değişkeni olması durumunda. aynı isimli değişken. Ondan kurtulmak için, değişkenleri kullanmadan önce her zaman başlatmalısınız (veya en azından varlığını kontrol edin) ve $_SESSION dizisinin dizinleriyle eşleşen global değişken adları vermeyin.

Çalışmıyorsa, ancak hiçbir mesaj görüntülenmiyorsa, komut dosyasının en başına TÜM hataları ekranda görüntülemekten sorumlu iki satır ekleyin - hatalar olması oldukça olasıdır, ancak bunları görmezsiniz. .
ini_set("display_errors" , 1 );
error_reporting(E_ALL);

veya error_log'daki hataları görün. Genel olarak, hata mesajlarını görüntüleme konusu bu makalenin kapsamı dışındadır, bu yüzden en azından onları görebildiğinizden emin olun. Sorun giderme hakkında daha fazla bilgi için bkz.
bu bölüm.

Herhangi bir hata olmadığından eminseniz, ancak yukarıdaki örnek yine de çalışmıyorsa, PHP'nin kimliği url'den geçirmeyi etkinleştirmemesi mümkündür, Çerezler nedense çalışmıyor.
Çerezlerinize ne olduğunu görün.
Genel olarak, oturumlar sizin için "işe yaramazsa", önce oturum tanımlayıcısını elle geçirmeyi deneyin, yani bir bağlantı oluşturun ve ona bir tanımlayıcı atayın:
oturum_başlangıç();
if (!isset($_SESSION [ "sayaç" ])) $_SESSION [ "sayaç" ]= 0 ;
Eko "Bu sayfayı güncellediniz". $_SESSION[ "sayaç" ]++. " bir Zamanlar.

Güncelleme" ;
?>

Bunu yaparken, PHP'nin bir URL üzerinden geçirilmişse bir oturum kimliğini kabul etmesini engelleyen session.use_only_cookies yönergesinin dahil edilmediğinden emin olun.

Bu örnek işe yaramazsa, sorun ya banaldadır. baskı hataları(oturumlarla ilgili "sorunların" yarısı yanlış yazılmış bir değişken adından gelir) veya PHP'nin çok eski bir sürümünde: 4.0 sürümünde oturum desteği tanıtıldı ve bir dizi $_SESSION- 4.1'de (Önceden kullanılmış $HTTP_SESSION_VARS).
Çalışırsa, sorun çerezlerdedir. İzleme - tarayıcının onu döndürüp döndürmediği, sunucunun tarayıcıya ne tür bir çerez koyduğu. Arama, göz atarak çok yararlıdır bakmak tarayıcı ve sunucu arasında HTTP başlıklarının değişimi.
Çerezlerin nasıl çalıştığına dair bir açıklama, zaten çok uzun olan bu metnin kapsamı dışındadır, ancak en azından sunucunun bir tanımlayıcı ile bir çerez gönderdiğinden ve tarayıcının onu döndürdüğünden emin olun. Ve aynı zamanda tanımlayıcılar birbiriyle çakışıyor =)
Çerez ayarı şöyle görünmelidir
Set-Çerez: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6;
veya nasıl
Set-Çerez: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; yol=/
(kök dizinden olmayan bir komut dosyası istiyorsanız)
Sunucu yanıtı şöyle görünmelidir
Tanımlama bilgisi: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6
veya
Tanımlama bilgisi: PHPSESSID=prlgdfbvlg5fbsbshch6hj0cq6; b=b
tarayıcı oturum kimliği dışında bir tanımlama bilgisi döndürürse.

Tarayıcı çerezleri döndürmezse - çerezlerin çalışıp çalışmadığını kontrol edin.
Erişmekte olduğunuz etki alanının geçerli bir ada sahip olduğundan (en az bir nokta içeren ve alt çizgi gibi yasa dışı karakterler içermeyen) emin olun ve tarayıcınızın önbelleğini temizleyin - bunlar, çerezlerin çalışmamasının iki ana nedenidir.

Buradaki örnek çalışıyor, ancak kendi kodunuz çalışmıyorsa, sorun açıkça oturumlarda değil, algoritmadadır. Değişkeni nerede kaybettiğinize bakın, örneği adım adım buradan aktarın, hata ayıklama senin senaryon.

Üstbilgi yönlendirmesi veya JavaScript gezinmesi kullanıyorsanız başka bir sorun ortaya çıkabilir.
Gerçek şu ki PHP, oturum tanımlayıcısını yalnızca formun bağlantılarına otomatik olarak ekler. , ancak bunu üstbilgiler, javascript, meta etiketler için yapmaz.
Bu nedenle, tanımlayıcıyı örneğin şu şekilde manuel olarak eklemeniz gerekir:
header("Yer: /script.php?" .session_name(). "=" .session_id());

Ayrıca, çok nadir görülen ve nereden geldiği tamamen belirsiz olan bir sorun, session.save_handler ayarının dosyalardan başka bir değere sahip olmasıdır. Değilse, düzeltin.

Emniyet
Oturum güvenliği geniş bir konudur. Bu nedenle, birkaç önemli noktaya odaklanacağım.
En ders kitabı - tanımlayıcıyı adres çubuğundan geçirmeyin. Bu, php.ini'de bile yazılmıştır, ancak oturumların işlevselliğini sınırlar. Bu tavsiyeye uymaya karar verirseniz, session.use_trans_sid = 0'a ek olarak session.use_only_cookies = 1'i de unutmayın.
Oturumu bir IP adresine bağlamanız tavsiye edilir: bu şekilde, tanımlayıcı çalınırsa, kötü adam çoğu durumda onu kullanamaz.
Oturum dosyalarını kaydetmek için kendi dizininizi ayarlayabileceğiniz session.save_path yönergesini kullanmanız önerilir. Bu, varsayılan olarak sunucunun paylaşılan geçici dizininde depolanmalarından daha güvenlidir.

Ek Bilgiler:

  • Oturum mekanizması, tanımlama bilgilerine ek olarak, sayfa önbelleğe almayı yasaklayan başlıklar da gönderir (aynı önbellek sınırlayıcı). Html için bu doğru ve gereklidir. Ancak yetkilendirmeyi kontrol eden bir komut dosyası içeren bir dosya göndermeye çalıştığınızda, Internet Explorer dosyayı indirmeyi reddediyor. Bu başlık yüzünden. Telefon etmek
    session_cache_limiter("özel");
    oturuma başlamadan önce sorunu çözmelidir.
  • Göründüğü kadar garip, ama dizide $_SESSION sayısal dizinleri kullanamazsınız - $_SESSION [ 1 ], $_SESSION [ "10" ]- oturumlar çalışmayacak.
  • 4.2 ve 5.0 sürümleri arasında bir yerde session.use_trans_sid ile ayarlamak mümkün değildi ini_set(). 5.0'dan başlayarak zaten tekrar mümkün.
  • 4.3.3 sürümünden önce PHP, yalnızca oturum başladığında isteğin tanımlayıcısı yoksa bir tanımlama bilgisi gönderirdi. Artık her aramada çerez gönderiliyor oturum_başlangıç()

    Oturumları kullanarak yetkilendirme örneği
    Yukarıdakilerin hepsini küçük bir örnekle açıklayalım:
    auth.php dosyasını oluşturun:
    if (isset($_POST [ "auth_name" ]))
    {
    $sql = "SEÇ * KULLANICILARDAN NEREDE name=?s";
    $satır = $db -> getRow($sql , $_POST [ "auth_name" ]);
    if ($row && password_verify ($_POST [ "auth_pass" ], $row [ "pass" ])) (
    $_SESSION [ "user_id" ] = $satır [ "id" ];
    }
    header("Yer: http://" . $_SERVER [ "HTTP_HOST" ]. $_SERVER [ "REQUEST_URI" ]);
    çıkış;
    }

    if (isset($_GET [ "action" ]) AND $_GET [ "action" ]== "logout" ) (
    oturum_başlangıç();
    session_destroy();
    header("Yer: http://" . $_SERVER [ "HTTP_HOST" ]. "/" );
    çıkış;
    }

    if (!isset($_SESSION [ "user_id" ])) (
    ?>








    çıkış;
    }

    Şimdi tüm korumalı komut dosyalarına satırı yazmak yeterlidir.
    "auth.php" gerektirir;
    Bu örnek, oturumun zaten başladığını ve veritabanı bağlantısının kullanılarak oluşturulduğunu varsayar. MySQL ile güvenli ve rahat çalışma sınıfı. Ayrıca, önerilen password_hash işlevi kullanılarak parolanın özetlendiğini varsayar.
    Korumalı dosya örneği:

    oturum_başlangıç();
    "safemysql.class.php" içerir;
    $db = new safemysql([ "db" => "deneme" ]);
    "auth.php" içerir;
    ?>
    gizli

    çıkış Yap

    Operasyon! Çok Faydalı Linkler:
    http://www.php.net/manual/en/ref.session.php - resmi belgelerde PHP'de oturum desteği hakkında en son ve en yeni bilgiler ve ayrıca çok sayıda kullanıcı yorumu. Okumanız şiddetle tavsiye edilir.
    http://phpclub.ru/manrus/f/ref.session.html - Alexander Piramidin tarafından çevrilen belgelerden bu bölümün Rusça'ya ÇOK eski bir çevirisi.
    http://phpclub.ru/detail/article/sessions
    "Seanslar Hakkındaki Gerçek" başlıklı acıklı bir makale. Çift izlenim bırakır. Yazar başlangıçta oturumların mekanizması hakkında ÇOK erişilebilir konuşuyor, ancak makalenin sonunda sunduğu yöntemler tamamen çamurlu.

    Siteden Dmitry Borodin tarafından ders kitabı makalesi
    http://php.spb.ru/ kesinlikle TAVSİYE EDİLMEZ.
    Beyler, o çok modası geçmiş. Yalnızca gerçek yanlışlıklar değil, PHP'deki oturumlar da uzun süredir çalışmıyor.
    Bunun için Dima'ya çok teşekkürler, Rusça oturumlarla ilgili ilk makaleydi, kendim çalıştım, ama şimdi onu hak ettiği bir dinlenmeye göndermem gerekiyor.
    Ayrıca ne yazık ki internette yer alan ve yıllardır güncellenmeyen birçok makalenin modası geçmiş durumda.