簡體   English   中英

有什么方法可以禁用 symfony 2 中某些控制器的會話嗎?

[英]Is there any way to disable session for some controllers in symfony 2?

目前我正在嘗試在操作開始時關閉會話,因為這是一個 AJAX 操作,根本不需要任何會話。

protected function _closeSession(Request $request)
{
    if($request->hasSession()){
        $session = $request->getSession();
        $session->save();
    }
}

public function listAction(Request $request, $mode, $id)
{
    $data = [];
    $this->_closeSession($request);
    //perform long polling

    //return json response
    $response = new Response(json_encode($data));
    $response->headers->set('Content-Type', 'application/json');

    return $response;
}

但是我從 NativeSessionStorage 收到此錯誤:無法啟動會話,因為標頭已發送。

更新:

問題是我有 2 個單獨的 ajax 調用,一個用於向站點添加評論,另一個長時間運行的腳本通過稱為長輪詢的技巧在頁面上顯示這些評論。 但是有一個問題,當第二個腳本阻塞第一個時,因為默認情況下兩者都使用會話。 這個問題在此處描述 - 長時間運行的后台 PHP 腳本會阻塞其他 PHP 頁面,直到它完成 我找到了一個解決方案來手動調用 session_write_close 而不是在 _closeSession 中調用 $session->save() 。 但是還有其他更像 Symfony 風格的方法嗎?

如果您不需要對這些控制器進行身份驗證,也許這應該是一種解決方法。

security.yml (sf 3.4)中:

firewalls:
    # disables session creation for assets controller
    assets:
        pattern: ^/assets
        stateless: true
        security: false

暫無
暫無

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

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