2011-01-25 52 views
0

我一直無法找出這個問題 - 它只是沒有任何意義。PHP會話變量不保存(雖然有些是)

服務器是PHP 5.2.6在Windows NT PDP-IIS 5.2構建運行3790

首先我已確認的會議都可以通過這個測試腳本的工作:

<?php 
session_start(); 
if (!isset($_SESSION['counter'])) $_SESSION['counter']=0; 
echo "Counter ".$_SESSION['counter']++.".<br><a href=".$_SERVER['PHP_SELF'].">reload</a>"; 
?> 

,計數器增加 - 這作品。

我的網站是使用一個定製的MVC框架(我寫的),我把應用功能的最後一個代碼,以此爲測試目的:

echo session_id(); echo '<pre>'; var_dump($_SESSION); echo '</pre>'; 
session_write_close(); exit(); 

第一本文件的幾行:

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
session_start(); 

會話轉儲並看起來像預期的那樣。現在我去服務器並打開會話文件 - 結果似乎取決於我使用的瀏覽器。對於Chrome和Safari,會話文件是空的。對於Opera和IE8,會話文件看起來很好。我會在一分鐘內到達FireFox - 但此時FireFox顯得很好。

所以出於測試目的,立即在session_start下列()我加了以下幾行:

$_SESSION['bogus'] = -5; 
$_SESSION['test'] = 'other'; 

我閉上我的瀏覽器,並再次嘗試該網站,所以我可以肯定我有一個新的會話。 Opera和IE8會話文件再次顯示正常。 Chrome和Safari都具有'假'和'測試'的價值,但是我的其他SESSION值缺失。在這一點上,FireFox起初與Chrome和Safari存在相同的問題 - 但在刷新頁面後,其餘部分出現。刷新沒有幫助Chrome或Safari。

這裏是的var_dump看起來像在這一點上有什麼:

array(3) { 
    ["bogus"]=> 
    int(-5) 
    ["test"]=> 
    string(5) "other" 
    ["saved_form"]=> 
    array(1) { 
    ["dgvSJM"]=> 
    array(4) { 
     ["method"]=> 
     string(4) "post" 
     ["processor"]=> 
     string(0) "" 
     ["formid"]=> 
     string(10) "searchForm" 
     ["fields"]=> 
     array(2) { 
     ["searchTerm"]=> 
     array(5) { 
      ["label"]=> 
      string(10) "SearchTerm" 
      ["type"]=> 
      string(6) "search" 
      ["required"]=> 
      bool(false) 
      ["multiple"]=> 
      bool(false) 
      ["selectempty"]=> 
      string(6) "B5BMXw" 
     } 
     ["formInput_0"]=> 
     array(5) { 
      ["label"]=> 
      string(0) "" 
      ["type"]=> 
      string(6) "submit" 
      ["required"]=> 
      bool(false) 
      ["multiple"]=> 
      bool(false) 
      ["selectempty"]=> 
      string(6) "TkZUfo" 
     } 
     } 
    } 
    } 
} 

我創建了一個不同的網站有不同的子域,並複製我的代碼完全結束了 - 它工作得很好「saved_form」中完美展現了會話文件。所以我嘗試刪除原始網站並重新創建它 - 沒有幫助解決問題。

任何人都知道發生了什麼和/或我該如何修復它?

謝謝。

+0

您是否嘗試清除問題瀏覽器上的緩存/ Cookie? –

+0

是的,雖然它沒有幫助。雖然我不確定緩存/ cookie如何影響服務器上的會話文件。會話cookie正在傳遞 - 會話只是沒有正確保存。 – Chris

回答

0

我相信我已經解決了這個問題。

在我的應用程序處理'saved_form'鍵 - 它在每次運行時執行 - 之後,出於安全原因將其刪除。

我使用更好鏈接的重寫模塊(模塊是IIRF)。

這就是問題所在 - 雖然它不是模塊的錯,只是我的規則。

頁面呈現並保存會話後 - 瀏覽器向favicon.ico發出了另一個請求,但是我設置的規則導致請求通過我的應用運行並且表單被處理並從會話中移除 - 從而導致我看到的奇怪的行爲。我添加了一條規則來忽略它,並且它再次運行。