Eşzamanlı oturumlar ve AJAX ile PHP sorun

1 Cevap php

Senaryonun sonunda session_write_close () çağıran bir oturum işleyicisi sınıf var. Bu bir başlık () veya exit () verilir bile oturum veri kaydedilir sigortalanır.

public function __destruct()
{
    session_write_close();
}

Ancak, benim AJAX sayfalarından biri için İKİ oturum güncelleştirmeler veritabanı katmanı tarafından işlenmesi fark etmişsinizdir.

Benim tahminim [1] sayfa yükler ve [2] AJAX isteği gönderir. [1] sayfa session_write_close() aramak için bir şans var önce bu [2] AJAX isteği oturum başlatmak gerekir.

[2] AJAX sayfa oturumu yüklendikten sonra, ardından [1] sayfa son oturumu kaydeder ve ardından [2] AJAX isteği kazandırır kısa bir süre sonra oturumu var - ilk bir yazar olan!

Bu gibi görünebilir:

[1] page loads session
[1] page sends output
[2] ajax loads session
[1] page saves session
[2] ajax sends output
[2] ajax saves session

Eminim bir sayfa başka önce oturumu yükleme değil yapmak için ne yapmalıyım oturumu kurtarmak için bir şansı var?

1 Cevap

Varsayım yanlıştı.

...session data is locked to prevent concurrent writes only one script may operate on a session at any time http://us.php.net/session_write_close

Başka bir deyişle, aynı zamanda bir kullanıcı için 100 AJAX istekleri çalışıyor olabilir ve onlar her onların dönüşünü beklemek olacaktır.

Benim sorunum her yükü yeniden oluşturulan benim oturumları sonuçlanan sağ oturum tablosu sütunu seçerek bir hata olduğu ortaya çıktı.