2014-07-20 70 views
0

所以我試圖做一個內聯登錄每當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函數的問題。我不知道。任何幫助是極大的讚賞!

+0

你不會發送任何回你的登錄...'返回'不是一個輸出語句 – charlietfl

+0

即使我編輯login.php回聲出「登錄」或「失敗」,那些將返回但$ _SESSION變量似乎沒有更新 – magnified

+0

爲了幫助調試實際上在login.php頁面中打印某些內容,然後在AJAX成功和AJAX錯誤函數中使用'console.log(data)'。 (禁用頁面重新加載,所以你不清除日誌)。 –

回答

0

原來,這是我的虛擬主機在服務器上設置的modsec問題。現在所有人都在工作。感謝大家的幫助!

0

你在錯誤的方式設置AJAX數據,它是對象的數組,沒有字符串

所以,與其

數據:「用戶名=」 +用戶名+」 &密碼='+密碼,

數據應該是:

數據:{用戶名:用戶名,密碼:密碼}

+0

我試過把它作爲一個JSON類型的字符串,我仍然結束了相同的結果。 :( – magnified

+0

我認爲這個問題可能與會議和沒有與AJAX 我幾乎可以肯定,如果數據應該是JSON類型。 – Mamnarock