2012-09-07 74 views
0

目前我開始一個會話如下安全會話:PHP如何啓動

if ($hasher->CheckPassword($password, $hash)) { //$hash is the hash retrieved from the DB 
     $what = 'Authentication succeeded'; 
      $_SESSION['username']=$_POST['username']; 
     header('Location: securedpage1.php'); 
    } else { 
     $what = 'Authentication failed'; 
     echo "Incorrect Password"; 
     include 'login.php'; 
     exit(); 

    } 

,你可以看到我想知道如果$_SESSION['username']=$_POST['username'];是啓動一個會話或者有更好的做法

的最佳途徑

謝謝你的回覆!

+2

我會檢索用戶的ID並將其存儲在會話中。我喜歡我的會話數據被認爲是理智的,而有效的ID就是一個例子。 – Kos

+0

謝謝你的回覆,你能否解釋我將如何檢索用戶ID並將其存儲在會話中? – neeko

+0

什麼是「安全會話」,爲什麼你認爲你當前的會話不安全? – zerkms

回答

2

您可以使用數據庫作爲存儲點而不是文件系統來滾動您自己的會話處理程序。這有幾個安全優勢,例如在共享主機上,例如,存儲在文件系統中的會話數據可能會受到影響。正如我在評論中提到的那樣,您還可以以這種方式存儲「源」IP地址並將其與會話綁定,並使從除原始IP以外的IP訪問的任何會話無效。

本文介紹的很詳細:http://shiflett.org/articles/storing-sessions-in-a-database

+0

感謝您的回覆,這是我一直在尋找的,我對我缺乏適當的術語表示歉意! – neeko

0

它沒有在示例中顯示,但我認爲session_start()在您的代碼中?您可以在此處瞭解有關會話開始的更多信息:PHP Manual: Session Start

+0

是的,我使用會話開始於我的代碼 – neeko

+0

這雖然有用,但實際上並沒有回答這個問題.... –

1

$_SESSION['username']=$_POST['username'];實際上並沒有啓動一個會話,session_start()一樣。所以你的問題是錯位的。

這行代碼沒有任何內在的錯誤。

如果你想知道如何編寫安全的會話代碼的一些信息,這是不是一個壞的地方開始:http://phpmaster.com/php-sessions/您可以搜索

兩個安全關鍵詞是「會話固定」和「會話劫持」 。另外兩個常見安全問題是XSS攻擊和CSRF攻擊。

這個主題也有一堆以前的問題已經在stackoverflow上,你應該搜索。 For instance

+0

謝謝,再次表示歉意,因爲沒有正確地說明問題,這將幫助我走出很多!非常感激 – neeko