ここでは、ここにすべての準備ができているものに言えば、カーネルの要求リスナとして登録完全な実施例です。この例では、タイムアウトを1,200秒(20分)にハードコードしています。あなたは(私は生産に何をしたかである)あなたのparameters.ymlファイルからの時間に渡すことができます。
#src\My\AppBundle\Resources\config\services.yml
kernel_request.listener:
class: My\AppBundle\EventListener\KernelRequestListener
tags:
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
arguments: [@security.context, 1200]
とクラス:
#Place in your src\My\AppBundle\EventListener folder
namespace My\AppBundle\EventListener {
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\Security\Core\Authentication\Token\AnonymousToken;
use Symfony\Component\Security\Core\Exception\CredentialsExpiredException;
use Symfony\Component\Security\Core\SecurityContextInterface;
class KernelRequestListener {
/** @var int */
private $maxIdleTime;
/** @var SecurityContextInterface */
private $securityContext;
function __construct(SecurityContextInterface $securityContext, $maxIdleTime) {
$this->securityContext = $securityContext;
$this->maxIdleTime = $maxIdleTime;
}
public function onKernelRequest(GetResponseEvent $event) {
if ($event->getRequestType() !== HttpKernel::MASTER_REQUEST) {
// don't do anything if it's not the master request
return;
}
$session = $event->getRequest()->getSession();
$token = $this->securityContext->getToken();
if ($session !== null && !($token instanceof AnonymousToken) && $token->isAuthenticated()) {
$session->start();
if ((time() - $session->getMetadataBag()->getLastUsed()) > $this->maxIdleTime) {
throw new CredentialsExpiredException();
}
$session->migrate(false, $this->maxIdleTime);
}
}
}
は同じに作られているのAjaxリクエストです元々セッションクッキーを設定していたドメイン名とsymfonyアプリケーションですか? – RobNY
うん、同じドメイン、同じアプリ。 –
質問にymlセッション設定を追加してください。 – hakre