2009-02-14 275 views
0

我正在创建类似于客户端intranat的用户登录系统。当我尝试访问主页时,我在FF中得到一个重定向循环。重定向循环

我检查,看是否有用户使用此登录:

if(($_SERVER['PHP_SELF'] != '/webmaster/index.php') && ($_SESSION['loggedin'] != '1234')){ 
    header("Location: ".$domain."index.php?l=no"); 
    exit(); 
} 

下面是我的过程的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页面有两种形式供客户使用,一种给webmastser,如果你是客户端,你会被重定向到:clients/,如果你是网站管理员,你会被重定向到:webmaster/

我检查了我的登录脚本,它正在返回正确的信息并将其登录,但它始终循环。

表单通过ajax提交,然后返回值为1的JSON有效或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跟踪用户会话?

+0

嘿, 我尝试一下通过实际传递页面参数中的URL,我得到: {“有效”:1,“用户名”:“演示”,“密码”:“演示”} 它返回查询的正确部分,这意味着帐户信息是正确的。然后我在这里设置SESSION,并使用JavaScript重定向。 – Coughlin 2009-02-16 02:05:20