Laravel cookie de session durée de vie
J'ai utilisé mon Laravel comme un OAuth2 client, et j'ai besoin de garder jeton je les cookies. Donc, j'ai mis le pilote à cookie, et de garder la valeur par défaut pour la durée de vie de 120
Lorsqu'un utilisateur case se souvenir de moi sur connexion, j'ai essayé de changer de vie avec le code:
$lifetime = time() + 60 * 60 * 24 * 365;//one year
Config::set('session.lifetime', $lifetime);
Mais sans succès. Dans n'importe quel autre contrôleur que j'ai vérifié la valeur de la vie et chaque fois que je reçois valeur par défaut.
\Log::info(\Config::get('session.lifetime'));
Edit #1:
C'est assez?
if(Input::has('rememberMe')) {
$lifetime = time() + 60 * 60 * 24 * 365; //one year
Session::put('Expires', $lifetime);
}
Edit #2:
J'ai mis acess_token touche de la même manière que n'Expire dans l'exemple ci-dessus, comme:
public function signin() {
/**
* Code for getting *client_code* and *client_state* from API server
*/
$access_token = $this->provider->getAccessToken('authorization_code', $form_data);
//$access_token is object and contain all data (access_token, refresh_token, expires)
Session::put('access_token', $access_token);
Session::put('refresh_token', $access_token->refreshToken);
Session::put('token_expires', $access_token->expires);
if(Input::has('rememberMe')) {
$lifetime = time() + 60 * 60 * 24 * 365; //one year
Session::put('expires', $lifetime);
}
return Response....
}
C'est le "défaut" Laravel session (j'ai changé de pilote de fichier à cookie dans /app/config/session.php). Je sais que le temps de vie doit être définie dans /app/config/session.php fichier, mais comme vous pouvez le voir j'ai besoin de plus de temps de vie pour se Souvenir de moi l'option
- Pouvez-vous montrer le code à l'emplacement du jeton dans les cookies? Vous pouvez uniquement modifier le cookie d'expiration de cours quand vous le mettez, et c'est par valeur du cookie.
- Si vous voulez "se souvenir de moi" fonctionnalité, vous êtes mieux d'utiliser une Sentinelle. cartalyst.com/manual/sentry
- Non, c'est le client sans base de données 😉
Vous devez vous connecter pour publier un commentaire.
Réellement lorsque vous définissez la valeur de ce genre dans un
Controller
:Ce n'est pas la mise à jour de la valeur dans le fichier, au lieu de cela, il définit pour la requête en cours (dans la mémoire) et lorsque vous vérifiez la valeur à l'aide d'un autre Contrôleur/Requête comme ceci:
Vous obtenez la valeur de la valeur d'origine du système de fichiers. Il est mentionné dans la documentation comme indiqué ci-dessous:
app/config/session.php
fichier afin de le rendre persistance.Puisque ça semble être OK pour utiliser les cookies de la session pilote dans votre cas, vous pouvez définir la durée de session à un an de
/app/config/session.php
par défaut et de stocker la date d'expiration de la cookie avec le jeton de la session. Qui vous permettent de contrôler artificiellement la validité du cookie.Fondamentalement, votre
signin
méthode pourrait ressembler à ceci:Ensuite, chaque fois que vous voulez utiliser la
access_token
, vous vérifiez quecookie_expires
n'est pas passé première (et si elle l'est, rediriger l'utilisateur vers la page de connexion après compensation de la session, par exemple).Je n'ai aucune idée de l'endroit où le
Session::put('expires', $lifetime);
sera utilisé. Pour moi, il semble normal de cookie variable, pas de vie réelle associée avec le cookie.Vous devez définir la durée de vie du cookie avant que vos cookies sont définis, et de le faire de la manière que Laravel sait que vous êtes à la définition d'un nouveau cookie valeur de durée de vie.
J'ai aussi eu la chance d'ajouter des
if (!$access_token) {
avant de définir le cookie car vous n'aurez pas toujours être authentifier avec succès.Cookie::queue(Cookie::make('access_token', $access_token, $lifetime));
(adapté à partir de github.com/illuminate/auth/blob/master/Guard.php)