自动登录时,$ _SESSION变量不会被保存

时间:2014-02-19 00:31:36

标签: php mysql database session-variables

我有一个与数据库通信的iPhone应用程序,其中包括用户数据(即用户名,电子邮件,密码)等内容,我为此创建了一个PHP API,并在iPhone应用程序中连接到该API。我的问题是:我将用户ID保存在$_SESSION以便以后在需要时恢复,当我手动登录时,$_SESSION变量很容易保存,我可以随时调用它们,但是当我需要时应用程序自动登录(显然是在第一次登录后,用户名和密码存储在iPhone钥匙串中),$_SESSION变量没有保存,我注意到它们只是存储和调用后没有问题我注销哪些转换为session_destroy();之后,这是我用于登录和退出的PHP代码

session_start();

function login($user, $pass) {

    $result = query("SELECT IdUser, username FROM login WHERE username='%s' AND pass='%s' limit 1", $user, $pass);

    if (count($result['result'])>0) {

        $_SESSION['IdUser'] = $result['result'][0]['IdUser'];

        print json_encode($result);

    } else {
        errorJson('Authorization failed');
    }
}

function logout() {

    $_SESSION = array();
    session_destroy();
}

我尝试在登录方法的开头添加session_destroy();,但它不起作用。

顺便说一下,我可以在IdUser或iPhone钥匙串中保存NSUserDefaults,并在需要时将其发送到服务器。 Is it safe/not wrong to do such things on the app side rather than the server side?

2 个答案:

答案 0 :(得分:0)

尝试这样的退出功能......

function logout() {
session_start();
    $_SESSION = array();
    session_destroy();
}

答案 1 :(得分:0)

尝试像这样的退出功能

function logout(){

   session_start();
   session_destroy();

}

  1. 当您调用logout函数时,它不会调用session_start(),因此您无法获取会话变量。您应该在编辑之前获取它。

  2. 详情:php.net session_destory()