2017-05-30 51 views
0

我有一个index.html页面,点击一个链接沿着登录表单滑动。
登录按钮的click事件对PHP脚本执行Ajax,成功时用户将被重定向到另一个页面(test.php)。jquery ajax无法创建php会话

问题是:我没有得到任何错误。
浏览器创建一个PHPSESSID,页面不会重定向。
直接浏览test.php结果$ _SESSION变量未定义错误。下面

代码:

PHP登录脚本:

<?php 
$servername = "localhost"; 
$username = "abcd"; 
$password = "12345"; 
$dbname = "abcdmaster"; 

$obj = new stdClass(); 
$obj->msg = ''; 
$obj->err = ''; 
$obj->uname = ''; 

// Create Database connection 
$conn = new mysqli($servername, $username, $password, $dbname); 

// Check connection 
if($conn->connect_error) { 
    die("connection failed: " . $conn->connect_error);   
} elseif(isset($_POST['userid']) and isset($_POST['password'])) { 
    session_start(); 
    $username = $_POST['userid']; 
    $password = $_POST['passwd'];  

    $sql = "select * FROM `adminuser` WHERE username=$username"; 

    $result = $conn->query($sql); 
    if($result->num_rows == 1) { 
    $row = $result->fetch_assoc(); 
    if(strcmp($row['password'],$password)==0) { 
     $obj->msg = "yes"; 
     $_SESSION['username'] = $row['username']; 
     $obj->uname = $_SESSION['username']; 
    } // end strcmp   
    } else { 
    $obj->msg = "no"; 
    //$obj->err = "Invalid Login Credentials"; 
    } 
    header('Content-Type: application/json'); 
    echo json_encode($obj); 
    return false;    
} // end isset 
?> 

的jQuery:

/* click event for login button */ 
$('.loginrow').on('click', 'input[value="Login"]', function() { 
    var creds = {} 
    creds.userid = $('#userid').val(); 
    creds.passwd = $('#password').val(); 
    console.log(creds); 
    $.ajax({ 
    url: 'http://localhost/server/adminlogin.php', 
    data: creds, 
    type: 'POST', 
    dataType: 'json',     
    }).done(function(data) { 
    if(data == 'yes') { 
     console.log("login ok"); 
     window.location.href = './server/test.php'; 
     } else { 
     console.log("login unsuccessful"); 
     } 
    });  
    return false; 
}); 

test.php的:

<?php 
session_start(); 
?> 
<!DOCTYPE html> 
<html> 
<body> 

    <?php 
    // Echo session variables that were set on previous page 
    echo "Logged on user is " . $_SESSION["username"] . ".<br>"; 

    ?> 

</body> 
</html> 

任何想法?

+0

添加'在session_start();'在adminlogin.php ...... –

+0

你必须在session_start添加到您的第一页 – Icewine

+1

哎呀......你的代码是脆弱的到SQL注入,你需要解决这个问题,另外,你需要以明文存储密码,这也是你需要修复的。 – Enstage

回答

0
  1. 请看看你的Ajax done

    .done(function(data) { 
        if(data == 'yes') { 
        console.log("login ok"); 
        window.location.href = './server/test.php'; 
        } else { 
        console.log("login unsuccessful"); 
        } 
    }); 
    

data是JSON对象这里,所以(data == 'yes')永远是假的。

您应该检查(data.msg === 'yes')

  • 使用xhrFields: {withCredentials: true},在AJAX设置,以保持会话cookie:

    $.ajax({ 
        url: 'http://localhost/server/adminlogin.php', 
        data: creds, 
        type: 'POST', 
        dataType: 'json', 
        xhrFields: {withCredentials: true}, 
        ... 
    
  • +0

    感谢您的回复,但没有任何变化。 –

    0

    发现在adminlogin.php代码一个错字,线

    elseif(isset($_POST['userid']) and isset($_POST['password'])) 
    

    应该是

    elseif(isset($_POST['userid']) and isset($_POST['passwd'])) 
    

    如jQuery的阿贾克斯创造一个像对象:

    var creds = {} 
        creds.userid = $('#userid').val(); 
        creds.passwd = $('#password').val(); 
    
    +0

    非常感谢大家的帮助esp Kosh和Louys,正如您所建议的,也有助于解决这个问题。 –