2012-03-25 37 views
0

我使用jQuery $ .post AJAX請求登錄用戶,並在ajax.php中設置$ _SESSION ['login']變量(session_start()在index.php中調用)以及其他登錄的東西,但是當我嘗試在其他頁面上引用$ _SESSION ['login']變量時,它不會被設置...爲什麼PHP變量在jQuery AJAX請求中分配值時保持不變設置

這是我的POST代碼

$.post('/assets/ajax/ajaxLogin.php',{username: $('[name=username]').val() 
    ,password: $('[name=password]').val()},function(data){ 

    if(data.success) 
    { 
     location.href=data.redirect;  
    } 
    else 
    { 
     $('#errorConsole').html(data.message).slideDown(); 
    } 

    },'json'); 

和ajaxLogin.php我設置$ _SESSION [ '登錄'] = 「1」。所以ajax腳本記錄用戶,如果他們有正確的信息,但是當他們重定向到dashboard.php,我嘗試echo $ _SESSION ['登錄'],我得到一個錯誤,

我沒有設置$ _SESSION正確,否則ajax請求不會在全局設置變量?

這是ajaxLogin.php

<?php 

    if(!include('../../config.php')){ 
     echo 'include failure'; 
    } 

    if($_POST){ 

     $myusername=$_POST['username']; 
     $mypassword=$_POST['password']; 
     // To protect MySQL injection (more detail about MySQL injection) 
     $myusername = stripslashes($myusername); 
     $mypassword = stripslashes($mypassword); 
     $myusername = mysql_real_escape_string($myusername); 
     $mypassword = mysql_real_escape_string($mypassword); 

     $sql="SELECT * FROM users WHERE username='$myusername' and     password='$mypassword'"; 
     $result=mysql_query($sql); 

     // Mysql_num_row is counting table row 
     $count=mysql_num_rows($result); 
     if($count==1) 
     { 
      $_SESSION['login'] = 1; 
      $data['success'] = true; 
      $data['redirect'] = '/dashboard.php'; 
     } 
     else 
     { 
      $data['success'] = false; 
      $data['message'] = "Your info is wrong...."; 
     } 
     echo json_encode($data); 
    } 

    ?> 

而且這裏是dashboard.php

<?php 
     include('includes.php'); 
    ?> 
    <?php 
    if(!isLoggedIn()) 
    { 
    echo 'You are not logged in'; 
    } 
    else 
    { 
    echo 'You are logged in'; 
    } 
    ?> 

和isLoggedIn()是:

function isLoggedIn(){ 

     if (isset($_SESSION['login'])){ 
      return 1; 
     } 
     else 
     { 
      return 0; 
     } 
    } 
+0

你能告訴我們ajaxLogin.php嗎? – MichaelRushton 2012-03-25 13:33:32

+0

...和dashboard.php – MichaelRushton 2012-03-25 13:45:20

+0

@MichaelRushton已添加他們 – 2012-03-25 13:51:02

回答

1

你需要調用session_start()上每個使用會話的頁面(在使用它們之前)。這包括AJAX請求中使用的每個文件以及dashboard.php文件。

注意:不適用於include/require附帶的文件。

+0

「會話已經開始」 - 這意味着或者調用了'session_start()',或者'session.autostart'開啓了。 – 2012-03-25 13:35:47

+0

來自哪裏? – MichaelRushton 2012-03-25 13:38:02

+0

第二行,在開頭附近,括號中的位。 – 2012-03-25 13:39:56

0

會話如何在客戶端保存?

如果您使用的是cookie,請仔細檢查以確保cookie在下一次請求時由瀏覽器發送。如果是,會話代碼有問題,我們需要查看您的PHP。如果不是,請檢查您的PHP錯誤日誌以瞭解會話無法保存的情況。

如果您使用的是URL查詢字符串,請確保您在請求之間傳遞它們。