我正在创建一个类似于客户端intranat的用户登录系统。当我尝试访问主页面时,我在FF中获得了一个重定向循环。
我正在检查用户是否使用此登录:
if(($_SERVER['PHP_SELF'] != '/webmaster/index.php') && ($_SESSION['loggedin'] != '1234')){
header("Location: ".$domain."index.php?l=no");
exit();
}
以下是我的process-login.php - >这是处理客户端登录的文件:
<?php
ob_start();
session_start();
ini_set('display_errors', 1);
error_reporting(E_ALL | E_NOTICE);
include ("config.inc.php");
include ("jsonEncode.php");
// username and password sent from form
$username = '';
$password = '';
$username = mysql_real_escape_string($_GET['username']);
$password = mysql_real_escape_string($_GET['password']);
$sql = "SELECT * FROM clients WHERE username='$username' AND password='$password' LIMIT 1";
//echo $sql;
$result = mysql_query($sql);
$data = mysql_fetch_array($result);
$count = mysql_num_rows($result);
if($count==1){
$_SESSION['username'] = $username;
$_SESSION['password'] = $password;
$_SESSION['client_id'] = $data['c_id'];
$_SESSION['loggedin'] = "1234";
/*
echo $_SESSION['client_id'];
echo $_SESSION['password'];
echo $_SESSION['username'];
*/
echo $_SESSION['loggedin'];
// valid
$var = array('valid' => 1, 'username' => $username, 'password' => $password);
print php_json_encode($var);
}else{
// invalid
$var = array('valid' => 0, 'username' => $username, 'password' => $password);
print php_json_encode($var);
}
?>
主index.php页面有两个表单,一个用于客户端,一个用于webmastsers,如果您是客户端,则会被重定向到:clients/
,如果您是网站管理员,则会被重定向到: webmaster/
。
我已经检查了我的登录脚本,它正在返回正确的信息并将其记录下来,但它会不断循环。
表单通过ajax提交,然后返回值为1的JSON有效或0无效,以查看用户是否可以继续。
答案 0 :(得分:1)
如果通过AJAX提交表单,您确定相应地设置了会话cookie吗?我知道Firefox会将cookie信息与异步请求一起发送,但您是否相信它会以相反的方式工作?
if (($_SERVER['PHP_SELF'] != '/webmaster/index.php') &&
($_SESSION['loggedin'] != '1234')) { // I don't like this!
header("Location: ".$domain."index.php?l=no");
exit();
}
$ _SESSION ['loggedin']值大多数情况下都是!='1234',最初会出现这种情况,您应该检查该值是否未定义并采取相应措施。你有什么保证,如果用户请求index.php $ _SESSION ['loggedin']不是!='1234',如果这是一个新的会话?否则,如果AJAX响应未相应地设置会话cookie,假设您使用会话cookie来跟踪用户会话,那么您将有一个重定向循环?