Я использую Slim framework для создания REST API, и это грубое приложение, которое я использую для целей разработки. Я хочу войти в систему и выйти из нее, и я установил переменную сеанса в идентификатор пользователя. Пользователь может войти в систему отлично в API останова, но удаленное устройство не распознает сеанс (что означает, что мой $ SESSION ['id'] пуст), где, как я ясно начал этот сеанс в моей службе отдыха хоста. Вот мой код:Как входить и выходить из системы в slim rest framework, используя промежуточное ПО slim session?
require 'lib/Slim/Slim.php';
use lib\Slim\Middleware\SessionCookie;
\Slim\Slim::registerAutoloader();
$app = new \Slim\Slim(
array(
'cookies.encrypt' => true,
'cookies.secret_key' => 'my_secret_key',
'cookies.cipher' => MCRYPT_RIJNDAEL_256,
'cookies.cipher_mode' => MCRYPT_MODE_CBC
)
);
$app->add(new \Slim\Middleware\SessionCookie(array(
'expires' => '20 minutes',
'path' => '/',
'domain' => '',
'secure' => false,
'httponly' => false,
'name' => 'slim_session',
'secret' => '',
'cipher' => MCRYPT_RIJNDAEL_256,
'cipher_mode' => MCRYPT_MODE_CBC
)));
$app->get("/login/:string", function($string) use ($app)
{
$input = json_decode($string);
try
{
if ($input->username && $input->password)
{
$user = Model::factory('Users')->where("username",$input->username)->where("password",md5($input->password))->find_one();
//$app->setCookie('user_id',$user->id);
session_cache_limiter(false);
session_start();
$_SESSION['id'] = $user->id;
$status = 'success';
$message = 'Logged in successfully.';
}
else
{
$status = false;
$message = 'Could not log you in. Please try again.';
}
}
catch (Exception $e)
{
$status = 'danger';
$message = $e->getMessage();
}
$response = array(
'status' => $status,
'message' => $message
);
$app->response()->header("Content-Type", "application/json");
echo json_encode($response);
});
$app->get("/logout",function() use ($app)
{
try {
unset($_SESSION['id']);
session_destroy();
session_start();
//$app->getCookie('user_id');
$status = 'success';
$message = 'You have been logged out successfully';
}
catch (Exception $e)
{
$status = 'danger';
$message = $e->getMessage();
}
$response = array(
'status' => $status,
'message' => $message
);
$app->response()->header("Content-Type", "application/json");
echo json_encode($response);
});
Он возвращается «Помнить успешно», но на самом деле не войдя в меня так в моем приложении, когда я проверяю isset($_SESSION['id'])
, нет ничего в переменной. Кто-нибудь знает, что происходит? Я действительно путаю, потому что в соответствии с тонкой документацией, он говорит:
Куки сеанса промежуточный слой будет работать совместно с $ _SESSION суперглобального так что вы можете легко перейти на эту сессию промежуточное хранение с нулевыми изменениями в вашем код приложения.
Если вы используете промежуточное ПО cookie сеанса, вам не нужно начинать собственный PHP-сеанс . Суперглобальный $ _SESSION будет по-прежнему доступен, , и он будет сохраняться в HTTP-файле cookie через уровень промежуточного программного обеспечения , а не с помощью собственного управления сессиями PHP.
Thankyou @nerdlyist Вы уверены, что мне не нужно ничего отправлять в json-заголовках, например, в cookie-файле сеанса или что-то в этом роде? – Daniel
@ Даниэль Не то, что я знаю. PHP будет обрабатывать свой собственный идентификатор сеанса, если это то, о чем вы говорите. – nerdlyist