2010-09-07 5 views
4

J'ai récemment commencé à utiliser CI et ses sessions CI, mais j'ai remarqué qu'une chose en particulier prend beaucoup plus de temps à faire avec les sessions CI qu'avec les sessions PHP de base: Tableaux.Quelle bibliothèque de sessions dois-je utiliser avec CodeIgniter?

J'ai un tableau de données qui persiste indépendamment de connexion/déconnexion appelée $_SESSION['stats'], I puis stocker des données dans ce tableau sous la forme:

$_SESSION['stats']['last_page'] = $_SERVER['REQUEST_URI'];. Et lorsqu'un utilisateur se déconnecte, il enregistre le tableau de statistiques dans une variable, efface la session et la charge dans la nouvelle session.

Le problème est que pour modifier la clé LAST_PAGE, au lieu de la ligne un au-dessus, je dois utiliser ce code:

$stats = $this->CI->session->userdata('stats'); 
$stats['last_page'] = $_SERVER["REQUEST_URI"]; 
$this->CI->session->set_userdata('stats', $stats); 

C'est l'un d'un certain nombre de contrariétés que je trouve dans les sessions CI , ce qui me fait me sentir insatisfait comme mon gestionnaire de session. Donc ma question est: Quel système de session dois-je utiliser avec CodeIgniter? ... existe-t-il une raison pour utiliser des sessions CI? Y a-t-il une bibliothèque de CI que vous suggéreriez? Pourquoi ne pas simplement utiliser des sessions PHP?

Merci,

Lemiant

+0

Je ne sais rien de CI, mais il semble que vous pourriez contourner ce problème en créant une classe Stats et en en stockant une instance. Ensuite, vous pouvez simplement utiliser $ this-> CI-> session-> userdata ('stats') -> setLastPage ($ _ SERVER ['REQUEST_URI']); 'Je sais que ce n'est pas exactement ce que vous avez demandé, mais il y a d'autres avantages à cela aussi (comme se débarrasser de certaines ficelles et aider à la documentation). – grossvogel

Répondre

7

Les sessions CI offrent des fonctionnalités supplémentaires; tels que la régénération automatique de l'ID de session chaque fois donné (pour des raisons de sécurité), le suivi d'adresse IP et flashdata (données de session effacées après sa lecture une seule fois).

Le mécanisme de session de CI stocke toutes les données dans un cookie. Le mécanisme de session natif de PHP est stocké côté serveur. Chacun a ses avantages/inconvénients. Les cookies ne peuvent contenir que 4 Ko de données. Par conséquent, si vous stockez de grandes quantités de données dans des sessions natives PHP de session, cela pourrait être meilleur.

Si vous décidez de vous voulez utiliser les sessions PHP natives utilisent:Session Hybrid (CI 1.7.2)

session hybride utilise les sessions PHP natives, peut stocker les données de session dans le CI par défaut db, est une goutte -en remplacement de la classe de session de CI, et nécessite seulement un fichier à réécrire.

[* Si vous utilisez une version de CI avant 1.7.0 essayer PHPSession et Native Session]

Side note: Si vous choisissez de rester avec les sessions de CI, pour plus de sécurité, vous pouvez stocker les sessions dans une base de données et chiffrer les cookies (voir Session Preferences).

+0

Merci, pour l'info. J'ai décidé de migrer vers les sessions PHP, car elles sont plus faciles à utiliser. (et autorise sesseion_regeneration manuelle) – lemiant

0

On dirait que vous utilisez une méthode de mie de pain.

Cela peut aider, http://codeigniter.com/forums/viewthread/137949/

Et pour répondre à votre autre question, oui, il y a une très bonne raison d'utiliser la bibliothèque de la session CodeIgniter. Je l'utilise parce que j'ai besoin de stocker des données de session utilisateur dans ma base de données (plus sûr) et la bibliothèque a la capacité de crypter les cookies et si le filtrage XSS global est activé, les données seront également nettoyées.

+0

1. Pourquoi une base de données est-elle plus sécurisée? 2. Pourrais-je simplement décharger une variable de la session CI dans $ _SESSION au début de la page et télécharger cette variable à la fin? – lemiant

+0

1. Parce que par défaut, CI stocke les variables de session non cryptées dans le cookie, c'est-à-dire qu'elles sont en texte brut sur l'ordinateur de l'utilisateur. Si les variables de session sont stockées dans la base de données, elles ne sont pas stockées dans le cookie. – Mike

+0

@lemiant Ce qui se passe, c'est que la seule chose stockée sur la machine locale de l'utilisateur est un identifiant chiffré que seul votre site peut utiliser. Cela gêne la plupart des tentatives de détournement de session. – WarmWaffles

Questions connexes