web-dev-qa-db-fra.com

Sessions CodeIgniter vs PHP sessions

Je suis relativement nouveau à CodeIgniter et je fais mon premier projet CI dans lequel il y a des comptes d'utilisateurs, etc. Dans le passé, j'ai toujours utilisé la variable $ _SESSION de PHP à cette fin. Cependant, CI semble avoir son propre mécanisme de session, qui, selon lui, est "meilleur"

Le mécanisme de session de CI semble stocker toutes les données dans un cookie? Personnellement, j'aime l'idée que toutes les données soient stockées sur le serveur, accessibles avec une clé de cookie comme un mécanisme de session natif PHP ... Suis-je stupide de penser que c'est mieux? Dois-je simplement accepter le mécanisme de CI? Ou dois-je continuer et utiliser des sessions natives PHP?

Que faites-vous les gars?

Merci,
Mala

45
Mala

Dans mon expérience avec CI, j'ai rencontré quelques anomalies avec ses sessions, mais pour la plupart des besoins quotidiens, la bibliothèque est bonne et facile à travailler. Comme il a été souligné, Flashdata est une fonctionnalité très agréable.

Si vous choisissez de rester avec les sessions de CI, je vous suggère fortement de stocker les sessions dans une base de données et, en outre, de crypter les cookies:

$config['sess_encrypt_cookie'] = TRUE;
$config['sess_use_database']   = TRUE;
$config['sess_table_name']     = 'sessions';

La structure de la base de données doit être la suivante:

CREATE TABLE IF NOT EXISTS  `sessions` (
    session_id varchar(40) DEFAULT '0' NOT NULL,
    ip_address varchar(16) DEFAULT '0' NOT NULL,
    user_agent varchar(50) NOT NULL,
    last_activity int(10) unsigned DEFAULT 0 NOT NULL,
    user_data text NOT NULL,
    PRIMARY KEY (session_id)
);
34
Cinnamon

Le manuel dit plus de flexibilité plutôt que mieux ;-)

Je suppose que le principal avantage de la classe de session CodeIgnite est qu'elle s'intègre au framework et qu'elle offre quelques fonctionnalités supplémentaires, telles que le suivi des adresses IP et ce qu'elle appelle flashdata (données de session qui sont effacées dès que possible comme il est lu). Si vous utilisez un cadre en premier lieu, cela signifie que ces options peuvent être attrayantes pour vous.

Quoi qu'il en soit, vous pouvez également enregistrer les données de session dans une base de données:

http://codeigniter.com/user_guide/libraries/sessions.html

8
Álvaro González

Gardez PHP session pour les informations importantes et utilisez la session CI pour les informations moins importantes.

Lisez ici wyh . http://codeigniter.com/forums/viewthread/130577/

4
shin

les sessions CI ont des limitations de taille de stockage

Comme vous le savez, les sessions CI sont essentiellement des cookies, que vous les chiffriez ou non. En ce qui concerne la sécurité, les deux ont ses avantages et ses inconvénients.

Ma préoccupation était la taille limite des sessions CI, il ne peut contenir que 4 Ko de données car il s'agit essentiellement d'un cookie, tandis que Native PHP session ne stocke que l'ID de référence sur le cookie et toutes les données de session sont stockées dans mémoire du serveur. Ceci est pratique lorsque vous avez un plus grand nombre d'éléments à stocker dans une session.

Dites un panier d'achat avec plus d'articles, ou une liste de lecture de musique d'utilisateur avec plus de 50 pistes ... etc.

J'espère que ces informations aideront quelqu'un un jour.

À votre santé..!!

1
Clain Dsilva

Je sais que c'est un post plus ancien, mais je pense qu'il vaut la peine de partager ce que j'ai trouvé.

Étant donné que CI utilise une approche basée sur les cookies (même avec le stockage de base de données), cela cause un problème pour mon application particulière qui sert des données aux clients distants qui demandent des données via curl. En fin de compte, les cookies et les scripts intersites, bien que gérables, ne fonctionnent pas bien ensemble.

J'ai choisi d'essayer de remplacer la classe native Session.php fournie par CI avec mon propre MY_Session.php. J'étais heureux de constater que ce n'était pas trop difficile, mais j'ai été surpris de constater que CI régénérait l'ID de session même si mon script les avait explicitement fournis.

Selon le manuel CI

L'ID de session unique de l'utilisateur (il s'agit d'une chaîne statistiquement aléatoire avec une entropie très forte, hachée avec MD5 pour la portabilité, et régénérée (par défaut) toutes les cinq minutes)

Bien que je puisse probablement trouver un moyen de contourner cela, je me demande s'il ne serait pas beaucoup plus facile de revenir aux sessions PHP.

Juste matière à réflexion si vous allez utiliser CI.

1
Brian Hammond