2012-10-06 74 views
0

我試圖阻止我的空間頁面的用戶在沒有先登錄的情況下導航到其他頁面。我明白我應該使用會話變量。我知道我通過輸入session_start()記住了特定會話的用戶;在頁面頂部。如果瀏覽器記住客戶端是否登錄,是否需要新的類文件?會話需要存儲在類對象中嗎?如果用戶導航到授權訪問的頁面,然後他們可以在那裏將單獨的php文件中需要的if/else語句存儲在哪裏?php記住一個會話

如果一個新的類是必要的即時通訊思想這將是這個樣子:

class Loggedin { 
    private $isLoggedIn; 

    public function Loggedin($username) { 
     if (array_key_exists($username, $this->isLoggedIn) && ($this->isLoggedIn[$username] == $password)) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 
} 

回答

0

我認爲你是方式過想這。

  • 密碼永遠不會存放時間超過在需要時(即初始授權請求,所以你$password是沒有必要的,而不是它總是有定義)。
  • 您可以隨時訪問$_SESSION。如果你想在課堂中包裝它,取決於你。
  • 此認證檢查是isset($_SESSION['username'])一樣簡單(假設你設定登錄該會話的值。
+0

你認爲登錄課程是必要的嗎? –

0

PHP中$_SESSION變量是他們稱爲superglobal。這意味着,這個變量始終是從任何範圍訪問。您的應用程序只需使用$_SESSION

同去同$_GET$_POST$_REQUEST$_SERVER$_ENV我敢肯定,我錯過了一個地方:。d

0

記住用戶可以像(登錄後成功)一樣簡單:

$_SESSION['userid'] = 1234; 

另一個頁面會質疑它像這樣:

if (isset($_SESSION['userid'])) { 
    // user is logged in 
} 

有沒有必要在盤中存儲的對象做到這一點。

+0

好的謝謝傑克,所以一旦我登錄我會在每個頁面使用if語句? –

+0

通過添加一個else語句ehrn嘗試訪問他們不應該訪問的頁面來生成錯誤消息呢? –

+0

@JamesByrne當然,去吧:) –

1

用戶已經登錄後,你可以簡單地將用戶ID存儲在$ _SESSION變量是這樣的:

的login.php:

if (login_correct($userid, $password)) { 
    // Login successful 
    $_SESSION['user_id'] = $userid; 
} 

的其他PHP文件看起來是這樣的:

if (null !== $_SESSION['user_id']) { 
    // User ist logged in... 
} else { 
    // User is not logged in! 
} 

你logout.php可以是這樣的:

$_SESSION['user_id] = null; 
+0

好的感謝馬庫斯,你不認爲會議銷燬是必要的退出?也是第一個if語句,可以在session_start()之後執行;在頁面的頂部? –

+0

使用session_destroy()後,$ _SESSION變量將爲空。如果要從$ _SESSION中刪除所有數據,可以將其用於註銷。但$ _SESSION ['user_id']也可以。 $ _SESSION應該在會話由session_start()啓動後使用。 –

+0

好的 - 你可以把會話[user_id]放在一個超鏈接中,這樣一旦點擊它就可以清除會話嗎? –