Je construis une fonctionnalité "Se souvenir de moi" dans CodeDigniter, Normalement, je vois des bibliothèques / projets définissant un cookie sur l'utilisateur avec un jeton, ce jeton est enregistré dans la base de données et est comparé à chaque fois que l'utilisateur accède au site Web.
Dans CodeInditer, nous pouvons définir le temps d'expiration de la session, cela me conduise à essayer une approche différente, c'est ce que j'ai fait: p>
Donc, mon code de connexion ressemble à ceci: p> et mon fichier de configuration: p> $config['sess_expiration'] = 0;
$config['sess_expire_on_close'] = FALSE;
3 Réponses :
Je ne peux pas dire que ce n'est pas correct, mais je peux vous dire ma façon de faire ça: p>
D'abord, j'ai défini la session à expirer sur le navigateur près d'une heure de disponibilité par défaut de 7200. P>
ALORS: P>
Le login définit la session userData p> li>
Le "souvenir de moi" définit un cookie séparé (je stocke un écrit crypté contenant le courrier électronique contenant de l'utilisateur + mot de passe + Ie: MD5 (passe + e-mail + id)) p> li> ol>
Chaque fois que l'utilisateur charge une page, je contrôle si le souvenir de Me Me Cookie existent, si j'existe, je crée la session utilisateur. P>
La seule chose que je sais est que la session, utilise une clé de cryptage, un attaquant malveillant prendra du temps à déchiffrer, de sorte que moins une clé de session existe moins l'attaquant de temps pour déchiffrer la clé actuelle. P>
J'évite toujours la session de ne pas expirer, alors le souvenir de moi est toujours quelque chose qui n'est pas bon pour la sécurité, je pense, mais de toute façon l'utilisateur de choisir ou non de cette fonctionnalité;) P>
En outre, cela peut être fait en édition / extension de la bibliothèque de session du système.
Premier: STROND> SET SESSION SÉNÉRATION DU TEMPIÈRE DANS LE FICHIER DE CONFIG.
avant que cette ligne ajoutez le code suivant p> sess_read () code> méthode p>
La solution la plus simple que j'ai trouvée pour ce problème est de simplement modifier le cookie créé par CodeIdigniter de cette manière:
$this->session->set_userdata('user', $user); // a cookie has been created if($this->input->post('remember_me')) { $this->load->helper('cookie'); $cookie = $this->input->cookie('ci_session'); // we get the cookie $this->input->set_cookie('ci_session', $cookie, '35580000'); // and add one year to it's expiration }
Très utile, merci. Un an est 31557600 secondes cependant :)