2011-08-29 188 views
5

我正在使用Symfony 1.3編寫一個Web應用程序。在我通過jQuery的$.ajax()調用調用操作後,我的會話變量出現問題。事情發生在這個順序:Symfony,jQuery.ajax()調用,會話變量丟失

  1. 的動作設置這樣的會話變量:

    $this->getUser()->setAttribute('uploaded-files', $uploadedFiles); 
    
  2. 然後,當操作調用視圖組件,生成的HTML頁面包含以下電話:

    $.ajax({ 
        type: "POST", 
        url: '<?php echo url_for("content/merge"); ?>', 
        cache: false, 
        success: mergingCompleteCallback 
    }); 
    
  3. 我點擊觸發上述ajax調用的按鈕。該調用執行相應的操作方法,但是當我打印出'uploaded-files'會話變量的內容時,它是空的。

    我還檢查了會話ID是否在設置變量的頁面調用和讀取變量(ajax調用)的頁面的調用之間保持不變,而會話ID沒有變化。我在網上搜索幾個小時,但無法找到解決方案。

+2

如何打印出內容,內容是什麼?由於ajax請求使用與其他任何請求相同的會話cookie,所以沒有理由說明爲什麼會話變量會因Ajax而丟失,而不是通常的請求。 – Gerry

+0

嗨。 AJAX調用只是通過回調函數返回一個文件的路徑。 URL請求調用一個調用系統調用pdftk(一些參數)的動作,然後用路徑返回一個回調給一個文件名。我遇到的問題是位於url_for(「content/merge」)的動作沒有看到會話變量($ this-> getUser() - > getAttribute('attr_name');)。但是,當我通過直接在瀏覽器中輸入URL來運行此命令,從而不使用AJAX時,會話變量會正確加載。這讓我感到困惑。我預計你描述的行爲是一樣的。謝謝! – pkout

+1

也許你會話cookie是httponly,是這種情況下jquery不能發送它。 –

回答

1

您也可以將會話值添加到調用本身,這樣您就不必在AJAX調用中獲取它。它有點冒險,但它會起作用。

您是否在開發欄中看到會話變量?也許它的緩存,我以前有過這樣的緩存問題。

+0

全局會話變量僅在重新加載頁面後顯示。用戶會話也顯示,但是鎖定。我無法更改進入用戶會話的值。 – trouble

3

我有類似的問題,這個問題是我是使用主機值存儲Cookie包含「www」,即www.mydomain.com和我正在Ajax請求沒有「WWW

的解決方案是使用像主機一樣的通配符。 Like .mydomain.com作爲您的主機在瀏覽器端存儲會話cookie。

只要確定你不是這個的受害者?

+0

這不會解決我的問題!我不知道你爲什麼贏得賞金,但謝謝你的回答! – trouble

+0

哈哈哈的評論很有趣 – Emiliano