所以我試圖做一個內聯登錄每當PHP $ _SESSION ['logged_in']變量未設置。 (這個變量是在我登錄用戶時設置的)問題是我可以讓我的腳本在使用頭部重定向的多個頁面時工作,但試圖通過對login.php文件的AJAX請求保持在同一頁面上失敗。這裏看看我的代碼。jQuery AJAX請求PHP登錄無法正常工作
登錄表單本身......
<?php
include ('global.inc.php');
if ($_SESSION['logged_in'] == 1) {
echo '<form id="addNoteForm"><label for="title">Title</label><input id="noteTitle" type="text" class="form-control" name="title"/>
<label for="content">Content</label><textarea id="noteContent" class="form-control" rows="20" name="content"></textarea>
<input type="submit" id="addNoteButton" class="btn btn-primary" value="Add Note" />
<button class="btn" onclick="cancelAddNote()">Cancel</button>
</form>';
}
else {
echo '<form id="loginForm" action="login.php" method="get" role="form">
<div class="form-group">
<label for="username">Username</label>
<input id="loginUsername" type="text" class="form-control" name="username" value="'.$username.'">
</div>
<div class="form-group">
<label for="password">Password</label>
<input id="loginPassword" type="password" class="form-control" name="password" value="'.$password.'">
</div>
<button type="submit" class="btn btn-default" name="submit-login">Login</button>
</form>';
}
?>
jQuery的AJAX請求腳本
jQuery(function() {
jQuery('#loginForm').submit(function(e){
e.preventDefault();
var username = jQuery('#loginUsername').val();
var password = jQuery('#loginPassword').val();
jQuery.ajax({
type: 'GET',
url: 'login.php',
data: 'username='+username+'&password='+password,
success: function(data) {
setTimeout(function(){
window.location.reload();
}, 1000);
},
error: function(data) {
console.log('AJAX login failed. Returned data = '+data);
}
});
});
});
這裏是login.php中文件
<?php
header("Access-Control-Allow-Origin: *");
require_once (__DIR__.'/includes/global.inc.php');
$userTools = new UserTools();
if (isset($_GET['username'])) {
$username = $_GET['username'];
$password = $_GET['password'];
}
if ($userTools->login($username, $password)) {
return true;
}
else {
return false;
}
?>
的global.inc.php文件
require_once (__DIR__.'/../classes/Note.class.php');
require_once (__DIR__.'/../classes/NoteTools.class.php');
require_once (__DIR__.'/../classes/User.class.php');
require_once (__DIR__.'/../classes/UserTools.class.php');
require_once (__DIR__.'/../classes/Database.class.php');
// connect to the database
$db = new Database();
// initialize UserTools object
$userTools = new UserTools();
// start the session
session_start();
// refresh session variables if already logged in
if (isset($_SESSION['logged_in'])) {
$user = unserialize($_SESSION['user']);
$_SESSION['user'] = serialize($userTools->getUser($user->id));
}
最後,我UserTools.class.php
public function login($username, $password) {
$hashedPassword = md5($password);
$database = new Database();
$database->query('SELECT * FROM users WHERE username = :username AND password = :password');
$database->bind(':username', $username);
$database->bind(':password', $hashedPassword);
$user = $database->single();
$user = new User($user);
if ($database->rowCount() == 1) {
$_SESSION['user'] = serialize($user);
$_SESSION['login_time'] = time();
$_SESSION['logged_in'] = 1;
return true;
}
else {
return false;
}
}
的登錄腳本我覺得我忽視的東西未成年人在這裏,需要一套新的眼睛來看一看吧。就像我之前說過的那樣,當我有一個單獨的login.php文件時,如果登錄成功,標題會重定向到「歡迎頁面」,我沒有任何問題。我想我有一個關於如何通過AJAX將數據返回給我的jQuery函數的問題。我不知道。任何幫助是極大的讚賞!
你不會發送任何回你的登錄...'返回'不是一個輸出語句 – charlietfl
即使我編輯login.php回聲出「登錄」或「失敗」,那些將返回但$ _SESSION變量似乎沒有更新 – magnified
爲了幫助調試實際上在login.php頁面中打印某些內容,然後在AJAX成功和AJAX錯誤函數中使用'console.log(data)'。 (禁用頁面重新加載,所以你不清除日誌)。 –