我已經爲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代碼,所以它可能是可疑的。
任何想法爲什麼用戶登錄到管理面板,試圖做一些事情,被迫重新登錄,然後允許在管理面板中像普通一樣做東西?
您在validateUser()中爲會話cookie設置了哪些參數? – jholster 2010-03-22 20:37:30
validateUser()在上面發佈的session_functions.php中定義。如果那不能回答你的問題,那麼我不明白你在問什麼 – sepiroth 2010-03-22 20:40:14
對不起,我的不好。如果瀏覽器收到/發送的會話ID與成功登錄後服務器上的會話ID匹配,我會跟蹤(使用livehttpheaders等)。 – jholster 2010-03-22 21:12:23