2014-06-25 96 views
1

因此,我正在爲我的網站開發一個登錄系統,並且我想在用戶登錄時更改導航欄,但由於會話後會話不斷變得無法工作我刷新頁面以更新導航欄。這是我在我的login.php腳本了:php - 刷新頁面後會話丟失

if ($loginNumRows == 1) { 
    echo 'true'; 
    session_start(); 
    $_SESSION['username'] = $loginRow['name']; 

當此呼應 '真',下面的JavaScript加載:

if (html == 'true') { 
    window.location.href = "index.php"; 

我「location.reload(真)審判; 「它仍然是一樣的。在導航欄的主頁面,我做了以下檢查:

<?php if (isset($_SESSION)) 
      {...} 

但是,這總是返回false。任何想法該怎麼辦?謝謝!

+3

有你把'在session_start();'' –

+1

在session_start()'必須在每個訪問過的網頁,最好在腳本的開頭。 – Ballantine

+1

@Lix我在索引頁 –

回答

2

首先,不需要JavaScript將您重定向到索引頁面。您可以從PHP也做到這一點:

header("Location: index.php"); 

所以login.php中看起來就像這樣:

if ($loginNumRows == 1) { 
    session_start(); 
    $_SESSION['username'] = $loginRow['name']; 
    header("Location: index.php"); 

請注意,我已經改變了順序。與其他人一樣我強烈建議您將會話開始放在您的代碼之上。

最後確保你有會議開始在index.php文件太(這也應放在上面所有的代碼):

session_start(); 

編輯:如果你要堅持你的JavaScript方法(巫婆我強烈不推薦),比你的login.php代碼應該是這樣的:

if ($loginNumRows == 1) { 
    session_start(); 
    $_SESSION['username'] = $loginRow['name']; 
    echo 'true'; 
1

確保您的session_start();位於所有腳本的頂部。

1

如前所述,我首先將session_start()放在頁面上的所有其他代碼之上,而不是在條件語句中。