我已经为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