2010-03-22 23 views
0

我已經爲PHP中的客戶端創建了一個管理面板,該面板需要登錄。這是在要求用戶管理頁面頂部的代碼先登錄:(PHP)用戶在嘗試在管理頁面上執行某些操作後被迫重新登錄

admin.php的

<?php 
session_start(); 
require("_lib/session_functions.php"); 
require("_lib/db.php"); 
db_connect(); 


//if the user has not logged in 
if(!isLoggedIn()) 
{ 
    header('Location: login_form.php'); 
    die(); 
} 
?> 

顯然,如果語句是什麼捉住他們,迫使他們在這裏登錄是產生的登錄頁面上的代碼:

login_form.php

<form name="login" action="login.php" method="post"> 
    Username: <input type="text" name="username" /> 
    Password: <input type="password" name="password" /> 
    <input type="submit" value="Login" /> 
</form> 

哪些職位信息到該控制器頁:

的login.php

<?php 
session_start(); //must call session_start before using any $_SESSION variables 
include '_lib/session_functions.php'; 

$username = $_POST['username']; 
$password = $_POST['password']; 

include '_lib/db.php'; 
db_connect(); // Connect to the DB 

$username = mysql_real_escape_string($username); 

$query = "<grab username, hashed password from DB>;"; 
$result = mysql_query($query); 

if(mysql_num_rows($result) < 1) //no such user exists 
{ 
    header('Location: login_form.php?login=fail'); 
    die(); 
} 

$userData = mysql_fetch_array($result, MYSQL_ASSOC); 
db_disconnect(); 
$hash = hash('<myHashingFunction>', $password . $userData['salt']); 

if($hash != $userData['password']) //incorrect password 
{ 
    header('Location: login_form.php?login=fail'); 
    die(); 
} 
else 
{ 
    validateUser(); //sets the session data for this user 
} 

header('Location: admin.php'); 

?> 

和會話功能頁面,提供登錄功能包含此:

session_functions.php

<?php 
function validateUser() 
{ 
    session_regenerate_id(); //this is a security measure 
    $_SESSION['valid'] = 1; 
    $_SESSION['userid'] = $username; 
} 

function isLoggedIn() 
{ 
    if($_SESSION['valid']) 
     return true; 

    return false; 
} 

function logout() 
{ 
    $_SESSION = array(); //destroy all of the session variables 
    if (ini_get("session.use_cookies")) { 
     $params = session_get_cookie_params(); 
     setcookie(session_name(), '', time() - 42000, 
      $params["path"], $params["domain"], 
      $params["secure"], $params["httponly"] 
     ); 
    } 
    session_destroy(); 
} 
?> 

我抓住了一個在線教程的sessions_functions.php代碼,所以它可能是可疑的。

任何想法爲什麼用戶登錄到管理面板,試圖做一些事情,被迫重新登錄,然後允許在管理面板中像普通一樣做東西?

+0

您在validateUser()中爲會話cookie設置了哪些參數? – jholster 2010-03-22 20:37:30

+0

validateUser()在上面發佈的session_functions.php中定義。如果那不能回答你的問題,那麼我不明白你在問什麼 – sepiroth 2010-03-22 20:40:14

+0

對不起,我的不好。如果瀏覽器收到/發送的會話ID與成功登錄後服務器上的會話ID匹配,我會跟蹤(使用livehttpheaders等)。 – jholster 2010-03-22 21:12:23

回答

0

記得清除瀏覽器的cookie,如果客戶端切換服務器:)

0

將session_regenerate_id與重定向一起使用時要小心。一般來說。別。

+0

那麼試着擺脫那條線? – sepiroth 2010-03-22 20:49:29

+0

我肯定會推薦你擺脫它,看看它是否修復你的問題。 – pestilence669 2010-03-22 20:53:10

+0

沒有工作 – sepiroth 2010-03-22 20:55:39

0

難道只是我,或者是你的isLoggedIn功能真的不安全?你所做的只是檢查會話變量的存在,任何人都可以用隨機值僞造。您需要根據驗證/登錄用戶的數據庫檢查實際會話ID /散列。

+0

有人會從外面設置一個會話變量..? – sepiroth 2010-05-13 00:38:48

相關問題