Ne $ _SESSION dizi olur eğer bir istek ortasında bir PHP oturum zaman aşımına?

4 Cevap php

Ben her zaman komut dosyası yürütme sona kadar bir komut dosyası yürütme ortasında sırasında bir PHP oturum zaman, $ _SESSION dizi içeriği hala kullanılabilir olacak, merak ettiniz mi? Örneğin:

session_start();

if(! isset($_SESSION['name'])) {
    echo 'Name is not set';
    exit;
}

// imagine there is a bunch of code here and that the session times out while
// this code is being executed

echo 'Name is ', $_SESSION['name']; // will this line throw an error?

O yüzden ben bir oturum süresi için kontrol tutmak zorunda kalmadan daha sonra komut bunları okuyabilir yerel kapsam için oturum değişkenleri kopyalamak için pratik mi? Gibi bir şey:

session_start();

if(isset($_SESSION['name'])) {
    $name = $_SESSION['name'];
} else {
    echo 'Name is not set';
    exit;
}

// bunch of code here

echo 'Name is ', $name;

4 Cevap

Bu tür şeyleri dert etmeyin. Hiçbir şey oturumda ne olacak. Bu sessioni_start() ve $_SESSION komut dosyası içinde her zaman mevcut olacaktır tarafından başlatılan oluyor.

Varsayılan üç saatlik oturumda ömür boyu size oturum (), so the only way a session could time out in the middle of a request is if a request takes three hours to process. By default PHP requests time out after just 30 seconds, so there's no danger of session expiry during a request. Furthermore, the $_SESSION değişken aniden bir istek ortasında değişmez session_cache_expire görmek her açtığınızda sıfırlanır. Bu doldurulur ne zaman oturumu başlar , ve bu kadar.

Değişkenler ilk isteği $ _SESSION küresel kopyalanır, bu yüzden yerel bir değişkene kopyalama gibi aynı etkiye sahiptir vardır.

Ancak, netlik uğruna, yerel bir değişkene kopyalamak için mantıklı. Eğer değişken birkaç kez kullanmayı planlıyorsanız, özellikle. Her yerde $ _SESSION ['değişken'] olan kod okumak zor olabilir.

Ne anlamak için gerekli seans nasıl olduğunu. Süper global bir $ _SESSION kullanarak bir komut dosyası erişen bir istemci yalnızca (Cookie / URL Saklı) kendilerine ait oturumuna anahtarı bilir. Bu oturum verileri kendisi müşteri ile ilgisi yoktur anlamına gelir. Eğer kullanmak istediğiniz oturum verilerine anahtarı varsa onu kullanabilirsiniz. Bir yerde saklanan kolayca erişilebilir oturumlar (I ayrıntıları hatırlamıyorum) çünkü PHP'nin eski sürümleri bazı güvenlik açıkları vardı.

Eğer bir PHP komut dosyası session id varsa makinede bellek temizlendi / sabitdisk (yani Bilgisayar Yeniden / Device Failure) bozuk olmadığı sürece Temelde, bu oturuma erişebilir.

Aksi php.net gidin ve oturumları nasıl çalıştığı hakkında ayrıntılı bilgi dalmak, bu yardımcı olur umarım.