2014-02-19 2 views
1

У меня есть приложение для iPhone, которое общается с базой данных, которая включает в себя такие вещи, как данные пользователей (то есть имя пользователя, адрес электронной почты, пароль), я создал PHP API для этого, и я подключаюсь к этому API в приложении iPhone. Моя проблема заключается в следующем: я сохраняю идентификатор пользователя в $_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 в NSUserDefaults или iPhone keychain и отправить его на сервер при необходимости. Is it safe/not wrong to do such things on the app side rather than the server side?

+0

Я не реально получить ваш вопрос .. Вы уверены, что сессия работает с вашим приложением и печенье или что-то еще не было бы лучше? – kero

+0

Я уверен, что это работает, я знаю, что это как-то странно. Но, возможно, это может быть у меня что-то недостающее. BTW, если я вызвал 'logout' в' applicationDidEnterBackground' и назвал 'login' в' applicationDidBecomeActive', он работает (наверняка, после того, как я закрою приложение, когда он находится в фоновом режиме, и откройте его снова), но только на это время, когда Я снова открываю приложение, которое не работает. –

+0

Является '' session_start() '' вызывается в самой первой строке в файле PHP (прежде чем что-либо выводится)? – ub3rst4r

ответ

0

Попробуйте функцию выхода из системы, как это ...

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

'session_start()' уже ** вызывается ** к тому времени, когда вызывается 'logout()'. Это ничего не изменит – zerkms

+0

Я думаю, проблема в том, что при вызове функции session_start() не запускается, попробуйте session_start() внутри функции выхода и входа в систему. –

+0

Я не ОП. И ваше предположение просто неправильно. Невозможно – zerkms

0

Попробуйте функцию выхода из системы, как этот

функция выхода из системы() {

session_start(); 
    session_destroy(); 

}

  1. Когда вы вызываете функцию выхода из системы, она не вызывает session_start(), поэтому вы не можете получить переменные сеанса. Вы должны получить ее, прежде чем редактировать ее.

  2. деталь: php.net session_destory()

Смежные вопросы