2014-12-11 64 views
0

我正在開發我的第一個使用CakePHP(Croogo)後端的phonegap應用程序。 如果我通過AJAX從phonegap發送我的用戶名和密碼到CakePHP,我可以使用CakePHP的$ this-> Auth-> login()成功登錄。用戶會話生成正確,我可以通過在登錄後閱讀$ this-> Session-> read('User')來從CakePHP獲取用戶數據。 但是,如果我從我的phonegap應用程序進行另一個AJAX調用來獲得該用戶會話,我沒有得到價值。如果通過phonegap的AJAX調用進行設置,CakePHP用戶會話是否保留在服務器上?

到目前爲止,我認爲如果我在服務器端設置會話,稍後(從同一瀏覽器會話)可讀取,因爲瀏覽器具有適當的Cookie設置。

現在我很困惑,如果CakePHP爲每個AJAX調用創建一個新的會話?

public function ajax_login_from_phonegap($user) { 
    [...] 
    if ($this->Auth->login($user)) { 
    $response["user"] = $user; 
    $response["msg"] = $this->Session->read('Auth.User.username'); 
    //here I got the correct value! 
    return $response; 
    } 
    [...] 
} 

public function another_action_from_phonegap() { 
    echo $this->Session->read('Auth.User.username'); 
    // here I have null 
} 

我只是想念什麼,或者我想錯了嗎? 在此先感謝您的幫助! (Configure :: version()='2.5.5')

+0

它就像每次你打電話給應用程序在php中運行的服務器的API調用。所以你只需要生成一個密鑰,每次登錄後發送它們,而你發送請求 – 2014-12-11 06:02:38

回答

1

我認爲你的問題可能比CakePHP更一般。當您登錄時,您的phonegapp應用程序是否保留會話cookie?你是否會在第二次AJAX呼叫中發送該cookie? 會話的工作原理是客戶端跟蹤包含會話ID的cookie,然後在每次發出請求時發送,這樣服務器就可以識別會話並將其與相應的會話關聯。

+0

嗨Chadrien,謝謝你的回答。到目前爲止,我無法使用phonegap存儲cookie,所以現在我將session id發回到我的json響應中的phonegap中,並且我會在每次AJAX調用時發送它,但是我無法連接到現有會話,我總是得到一個來自蛋糕的新會話ID。我試圖$ this-> Session-> id($ sessionid_got_from_phonegap)但無濟於事...... – fmarton 2014-12-12 06:41:52

+0

最後,我設法弄清楚我的登錄正在使用其原始版本。問題是Ripple無法接收cookie,當在設備上運行應用程序時,我得到了一個可行的解決方案。 但是你的答案幫助我進入了,所以我給它一張支票。 :) 謝謝! – fmarton 2014-12-14 18:20:11

0

您已設置$this->Session->('User'),但您正在嘗試讀取$this->Session->('Auth.user.username')

+0

CakePHP成功$ this-> Auth-> login()後自動設置會話。生成的用戶會話有很多字段,如用戶名,ID,電子郵件等。 – fmarton 2014-12-11 06:58:49

+0

糟糕。你是對的。我正在考慮'$ this-> Auth - >('user')'。 – 2014-12-11 13:37:34

相關問題