Question

Comment implémentez-vous cela dans CodeIgniter?

Était-ce utile?

La solution

(Cette réponse était une réponse à la question initiale)

  

Comment feriez-vous cela? Ou, comment   vous créez une session avec une plus longue   date d'expiration que les autres?

     

Toutes les sessions créées utiliseraient le   même $ config ['sess_expiration'] dans le   fichier de configuration (par défaut: 7200 secondes),   est-il possible de passer une valeur personnalisée   ?

L'extension de l'expiration d'un cookie de session ne fonctionne pas pour un "se souvenir de moi" l’utilisateur perd son cookie de session lorsqu’il ferme le navigateur. Si Code Igniter n’a pas de fonction native "Remember", vous devrez écrire quelque chose pour supprimer un cookie longue durée contenant des informations permettant une connexion automatique lorsque le serveur le verra de nouveau.

Il existe un bon article sur les meilleures pratiques de cookies de connexion persistants , qui peut se résumer comme suit:

  
      
  1. Lorsque l'utilisateur se connecte avec la case Mémoriser mes informations cochée, un compte   Un cookie est émis en plus du   cookie de gestion de session standard. 2
  2.   
  3. Le cookie de connexion contient le nom d'utilisateur de l'utilisateur et un nombre aléatoire.   (le "jeton" à partir de maintenant) d'un   convenablement grand espace. Le nom d'utilisateur et   jeton sont stockés comme une paire dans un   table de base de données.
  4.   
  5. Lorsqu'un utilisateur non connecté se rend sur le site et présente un cookie de connexion,   le nom d'utilisateur et le jeton sont recherchés   dans la base de données.        1. Si la paire est présente, l'utilisateur est considéré comme authentifié.   Le jeton utilisé est supprimé de la   base de données. Un nouveau jeton est généré,   stocké dans la base de données avec le nom d'utilisateur,   et délivré à l'utilisateur via un nouvel identifiant   biscuit.        2. Si la paire n’est pas présente, le cookie de connexion est ignoré.
  6.   
  7. Les utilisateurs authentifiés uniquement via ce mécanisme sont:   pas autorisé à accéder à certains   informations ou fonctions protégées   comme changer un mot de passe, visualiser   informations d'identification personnelle, ou   dépenser de l'argent. Pour effectuer ces   opérations, l'utilisateur doit d'abord   soumettre avec succès une normale   formulaire de connexion nom d'utilisateur / mot de passe.
  8.   
  9. Étant donné que cette approche permet à l'utilisateur de se rappeler plusieurs fois   les connexions à partir de différents navigateurs ou   ordinateurs, un mécanisme est prévu pour   l'utilisateur efface tout ce dont on se souvient   connexions en une seule opération.
  10.   

Un autre article renforçant la sécurité de ces idées dans Meilleure pratique en matière de cookies de connexion persistants améliorés

.

Si vous suivez les pratiques décrites dans ces articles, vous ne vous tromperez pas!

Autres conseils

Vous voudrez peut-être reconsidérer la suggestion de "Meilleure pratique pour les cookies de connexion persistants améliorés". J'ai posté mon analyse du problème sur le site, mais l'essentiel est le suivant:

  

Vous ne pouvez pas empêcher le vol de cookies sans ligne sécurisée, quoi que

(* Par 'ligne sécurisée', j'entends tunnel / cryptage avec clé publique / tunnel SSL / ou un schéma de challenge-réponse robuste *)

Je suis tout à fait en faveur des meilleures pratiques en matière de connexion persistante, mais il existe un point où aucune supercherie ne peut aider, et où la seule progression est SSL.

Merci pour la solution. Je l'ai implémenté dans mon projet CI.

DEV Remarque: le cookie doit avoir un hachage sécurisé comme clé Remember-Me. - ne pas simplement stocker un identifiant utilisateur) - ne pas stocker de mot de passe, - et ne stocke pas le hash du mot de passe. De cette manière, les utilisateurs ne peuvent pas se connecter automatiquement à aucun compte.

Scénario le plus défavorable: dès qu'un pirate informatique découvre la méthode de hachage, vous pouvez ajuster la fonction producteur clé à un endroit et vous êtes à nouveau configuré avec la sécurité. Je voudrais juste ajuster les chaînes de sel et de poivre.

J'espère que ça aide. Chris D. - de l'Australie:)

Pour ces raisons, les variables de CI de toutes les classes sont accessibles via sa propre bibliothèque:

Par exemple:

$this->session->sess_expiration = 500000;

J'espère que cela résoudra votre problème.

il y a une bibliothèque sur github pour me souvenir de le télécharger.

À l'aide de la fonction setCookie () de cette bibliothèque, les événements suivants se produisent:

1.Un cookie est généré avec un numéro unique Ce numéro est enregistré dans une table de base de données, appelée ci_cookies, avec le netid / username transmis à setCookie ()

2.Lorsque la fonction verifyCookie () est appelée le hachage de cookie du navigateur doit correspondre au hachage enregistré dans la base de données. Si tel est le cas, verifyCookie () renvoie vrai sur sa page d’accueil

Vous devez définir la configuration avant la session de chargement

$do_not_remember = (boolean) $this->input->post('do_not_remember');
if ($do_not_remember) {
   $this->config->set_item('sess_expiration', 0);
   $this->config->set_item('sess_expire_on_close', true);
}
$this->load->library('session');
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top