1 год назад я создал социальную сеть PHP, которая работает очень хорошо. Через браузер, когда пользователь входит в систему, я использую переменную $ _SESSION для хранения учетных данных и запоминания пользователя на всех страницах. Все работает хорошо
Сейчас я пытаюсь создать версию приложения на сайте, используя PhoneGap и jQuery Mobile. На первый взгляд я попытался использовать тот же подход: для управления входом пользователя я реализовал простую форму с адресом электронной почты и паролем, которая отправляет запрос ajax в файл «check_login.php».
Если адрес электронной почты и pw верны, я «захожу на сайт», что означает, что я храню все в переменной сеанса, как всегда.
Что я заметил, что сводит меня с ума, так это то, что при использовании этого подхода данные не сохраняются в переменную $ _SESSION. Используя мое приложение, каждый раз, когда я отправляю AJAX-запрос на сервер, переменная $ _SESSION исчезает, и похоже, что данные для входа не сохраняются. Как я никогда не вошел в систему. (Конечно, я поместил session_start () в верхней части каждой страницы). Более того, каждый раз, когда я отправляю AJAX-запрос на сервер, session_id () изменяется.
Это нормально? Означает ли это, что с Phonegap я не могу положиться на переменную $ _SESSION или я что-то упускаю?
Если да, то почему?
Самая большая проблема с этим подходом состоит в том, что сессия чистого PHP истекает через короткий промежуток времени (по умолчанию 24 минуты). Таким образом, вы делаете непоследовательно расположенные вызовы, которые могут пересечь эту границу времени.
Есть несколько способов обойти это
Во-первых, нужно изменить обработчик сеанса, чтобы сохранить сеансы в более длительной перспективе (как база данных). Дополнительные затраты, но вы можете сохранить идентификатор сеанса на более длительный период и сохранить его в своем localStorage
,
Вторым было бы напрямую токенизировать ваши логины. Таким образом, пользователь входит в систему и получает некоторый случайный хэш (т.е. md5(uniqid(mt_rand(), true))
), который служит их токеном. Затем ваше приложение связывается со специальной страницей и передает этот токен, и вы можете проверить его в своей таблице токенов. Это позволит вам лучше контролировать ваши логины. Вы могли бы истечь токены по желанию и не были бы в той же милости сессий PHP.
Других решений пока нет …