2014-01-08 40 views
1

我使用ajax和php創建一個在線商店。我的索引有一個與ajax一起顯示的登錄部分,並且還有一個導航條,在完成登錄時獲取用戶的名稱。PHP會話存儲變量,但當更改頁面時,它們消失

因此,當您登錄到頁面時,表單會將您發送到Login.php,您可以在其中看到會話的內容以及導航器欄的變化,如前所述。

我只在索引頁上有session_start(),它工作正常; SESSION存儲了我想要的所有內容以及導航欄,顯示了名稱。但是當我用ajax改變某些東西並打印出會話時(print_r($ _ SESSION)),結果發現會話消失了,而且沒有定義。

一位朋友告訴我在每個頁面放置session_start(),所以我把它放在Login.php文件中,現在會話變量在登錄後顯示爲空,所以導航欄甚至不工作。

此外,在登錄後刷新索引時,它不會保持記錄狀態。

因此,Session看起來會存儲這些變量,但它們不會長時間保存。

我想使用MVC計劃(這是一個任務),所以我只用在session_start上的索引和登錄頁面,而不是在「控制器」和「意見」

綜上所述,我的會話工作在開始,它存儲數據,我改變到第二頁,仍然有效,加載頁面後內容消失,會話未定義,但如果我在第二個文件中記下「session_start()」,甚至不工作

這裏是我從數據庫中獲取信息的代碼。 (我不認爲這是有用的,但)

function Login() 
{ 
    // Skiping conection code 

    $sql = "SELECT * FROM Usuario WHERE nombre = '$username' && password = '$password'"; 
    $resultat = mysqli_query($connexio,$sql)or die(mysqli_error($connexio)); 
    $usuaris = array(); 
    while ($fila = mysqli_fetch_array($resultat)) 
    { 
     $usuaris = $fila; 
    } 
    $_SESSION['ID'] = $usuaris['ID']; 
    $_SESSION['nombre'] = $usuaris['nombre']; 
    $_SESSION['admin'] = $usuaris['Admin']; 

    mysqli_close($connexio); 
    return $usuaris; 
} 

感謝您的關注

+0

登錄作品,這段代碼只是爲了看看我是如何進入會話變量中的數據 – user3172801

+3

您需要在使用Sessions變量的每個頁面上使用session_start()。 – Goikiu

+0

在開始將變量插入$ _SESSION之前,您是否調用session_start()? – martin

回答

0

添加在session_start前下列()

session_set_cookie_params(0, "/"); 
+0

一個更復雜的答案可能會更有幫助。爲什麼要這樣做? – pzkpfw

+0

是設置在php.ini文件中定義的cookie參數。此功能的效果只會持續腳本的持續時間。因此,您需要在每個請求和session_start()被調用之前調用session_set_cookie_params()。 此函數更新可以使用ini_get()檢索的相應PHP ini配置密鑰的運行時ini值。 http://www.php.net/manual/en/function.session-set-cookie-params.php –