2013-06-01 38 views
2

我正在編寫一個應通過AJAX工作的登錄函數。如果用戶能夠登錄,則應該有兩個新的Cookie。如果它不起作用(錯誤的電子郵件或密碼),cookie不會被設置。將Cookie設置爲AJAX請求後無法使用

我的問題是這樣的。我登錄後,cookie被設置,但是當它到達cookie被檢查的代碼時,它是空的。當我重新加載我的頁面時,cookie就在那裏,一切正常。爲什麼在AJAX請求後cookie不可用?

的Javascript:login.php中的

$.ajax({ 
    type: "POST", 
    url: "php/login.php", 
    data: dataString, 
    async: false 
}); 

var email = '<?php echo $_COOKIE['email']; ?>'; 
var login = '<?php echo $_COOKIE['login']; ?>'; 

if(email != null && email != "" && login != null && login != "") { 
    var html = '<h3>You are logged in as <b>' + email + '</b></h3><br><br><button id="logoutbtn" class="submitButton">Ausloggen</button>'; 
    $("#registInfos").empty(); 
    $(html).appendTo($('#registInfos')); 
} else { 
    console.log('login not successful'); 
    $('<p>Login failed, wrong email or password?</p>').appendTo($('#registInfos')); 
} 

內容:

<?php include('../../admin/php/connection.inc.php'); ?> 
<?php header('Access-Control-Allow-Origin: *'); ?> 

<?php 
    if ($_SERVER['REQUEST_METHOD'] == 'POST') { 

     $email = $_POST['email']; 
     $password = $_POST['password']; 

     $abfrage = "SELECT email, password FROM ios_user WHERE email = '$email' LIMIT 1"; 
     $ergebnis = mysql_query($abfrage); 
     $row = mysql_fetch_object($ergebnis); 

     if($row->password == $password) { 

      session_start(); 

      setcookie("login", "true", time()+3600*24*30*12, "/"); 
      setcookie("email", $email, time()+3600*24*30*12, "/"); 

      session_commit(); 
     } 
    } 
?> 
+1

您必須在登錄到其他頁面後重定向。您無法在一個動作中設置和讀取同一個cookie。 – Eugen

回答

1

問題是這樣的代碼:

var email = '<?php echo $_COOKIE['email']; ?>'; 
var login = '<?php echo $_COOKIE['login']; ?>'; 

頁面加載時,服務器呈現電子郵件,登錄基於客戶發送的cookies。但是,當您發送ajax請求時,頁面不會被重新加載並且這些值不會更改。即使設置了Cookie,您仍然使用頁面第一次加載時渲染的舊值。

我建議您:

  • 將用戶重定向到另一個頁面登錄
  • 後或要顯示的消息的情況下,您的服務器只是發回的消息,指示狀態代碼登錄成功,客戶端的javascript可以解析該消息並顯示成功信息(在這種情況下不需要依賴cookie)