Я использую междоменный домен и использую php-сервер для получения информации о пользователе при входе в систему. На своем работающем веб-сайте я использую php-код и при входе пользователя я добавил этот код
session_start();
Затем просто объявите информацию о пользователе при успешном входе в систему следующим образом:
$_SESSION['user_id'] = $user['user_id'];
$_SESSION['user_email'] = $user['user_email'];
$_SESSION['user_name'] = $user['user_name'];
А потом я использую эту сессию $user['user_id'];
в каждом запросе пользователя.
Как реализовать сеанс, когда пользователь вошел в гибридное приложение? Это то же самое, как работает мой работающий сайт? Мне просто нужно добавить сессионный код в запрос ajax? Любая идея?
Для этого вам нужен хост-сервер, который будет аутентифицировать и общаться с вашими устройствами. Общие протоколы будут использовать cURL
а также JSON
ответ:
УДАЛЕННОЕ УСТРОЙСТВО
1) Ваше устройство, я буду использовать другой сервер, потому что это легко, установит соединение с помощью cURL:
function cURL($variables = false)
{
$url = "http://www.example.com/";
$query = (!empty($variables))? '?'.http_build_query($variables) : '';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url.$query);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if(!empty($response))
$data = json_decode($response,true);
curl_close($ch);
return $data;
}
$login = cURL(array(
'service'=>'login',
'apikey'=>123123,
'username'=>'whatever',
'password'=>'whatever')
);
print_r($login);
API ХОСТ-СЕРВЕР
2) Ваш сервер будет прислушиваться к услугам. я использую $_GET
но $_POST
лучше:
if(!empty($_GET['service'])) {
switch($_GET['service']) {
case('login'):
logInUser($_GET);
}
}
logInUser()
Функция будет просто делать обычную функцию входа в систему, за исключением того, что она установит timestamp
, token
, apikey
, а также username
в базе данных и вернуть это через JSON в случае успеха:
//...authentication code here...//
if($valid) {
// However you want to make a token
$token = md5($usename.mt_rand(1000000,9999999).time());
// Do code here to save the username, token, apikey, timestamp into database
// This will then echo back the token on success to the device
die(json_encode(array('token'=>$token,'success'=>true)));
}
else {
die(json_encode(array('token'=>'','success'=>'bad username/password')));
}
После этого устройство перезванивает на хост с токеном в строке запроса и apikey. Он также включает службу и любые переменные, которые требуются службе для отправки данных обратно на устройство. Каждое попадание на сервер приводит к тому, что сервер ищет apikey, затем service, а затем, если service не login
, потребует токен. Он будет запрашивать базу данных и проверять, что все эти вещи в базе данных действительны. Если токен существует, а временная метка достаточно свежая (для нее можно указать время истечения), служба запускается. После запуска службы (или до ее завершения) timestamp
значение токена обновляется до текущего времени.
Других решений пока нет …