2014-12-11 59 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

相关问题