簡體   English   中英

避免在 Symfony 中鎖定會話 PHP

[英]Avoid locking session PHP in Symfony

我使用Symfony作為 Web 應用程序的框架,我遇到了PHP 鎖定會話的問題。

當我打開瀏覽器選項卡並訪問處理大量數據的應用程序頁面時(需要 12 到 18 秒) ,如果我打開另一個選項卡並訪問應用程序的另一個頁面(例如索引) ,在不到一秒的時間內加載)在前一個選項卡完成之前,不會加載后一個選項卡

我認為這是因為:當我打開第一個頁面時,Symfony 控制器自動打開會話,PHP 鎖定了它存儲會話的文件,因此,直到該頁面沒有完成處理,控制器關閉會話並且 PHP 釋放存儲會話的文件,以下頁面(共享會話)將不會加載。

我嘗試將 PHP 處理程序更改為 Memcache 並解決了此錯誤,但我想知道您是否知道在 PHP將會話存儲在文件中時避免在 Symfony 中鎖定 PHP 會話的任何簡單方法

這種情況並非 Symfony 獨有。 您可以在幾乎任何其他基於 PHP 的 Web 應用程序中體驗完全相同的事情,這些應用程序使用來自同一客戶端的會話和並行請求。

一個典型的例子是 WordPress,其中有多個插件需要更新。 如果您同時單擊所有插件上的 AJAX 更新鏈接,它們將不會全部同時更新。 (您點擊更新的第一個插件需要在第二個插件開始更新之前完成,以此類推)

可能重復: 如何處理從一個客戶端到一個 PHP 腳本的多個並行請求

Symfony 特有的部分問題是它真的希望有一個可用的會話,因為框架的某些部分(例如安全包)需要一個會話。 當會話基於文件時,您會遇到一個限制,因為您不能在任何給定時間對同一文件有多個寫入句柄,這是由底層操作系統而不是 PHP 強加的警告。 -- 這不是內存句柄的問題,這就是memcached為你解決了這個問題的原因。

您有什么理由要使用基於文件的會話而不是 memcached? memcached 是更好選擇的原因有很多,如下所述: Session VS File VS Memcache for a Cache in PHP?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM