2010-12-13 6 views
8

Comment augmenter la taille de l'infrastructure de session CodeIgniter?taille de la session dans codeigniter

La taille standard est 04 kb

+0

CodeIgniter utilise des cookies pour stocker des informations de session. Vous devriez envisager d'utiliser une base de données pour stocker des informations si vous allez stocker de telles quantités de données. – Malachi

+0

merci, J'ai changé mon programme pour ne pas enregistrer certaines données en session – Pedro

Répondre

17

Cela n'a rien à voir avec la session codeigniter, 4kb de données est la taille maximale qu'un cookie peut contenir.

Pour stocker davantage de données, utilisez une base de données (voir «Enregistrement des données de session dans une base de données» dans http://codeigniter.com/user_guide/libraries/sessions.html).

+0

Le chapitre "Sauvegarde des données de session dans une base de données" explique uniquement comment stocker les données de validation avec CI_Session. Vos "vraies" données sont toujours stockées dans un cookie, donc la taille de la session est la même: 4kb Voir http://codeigniter.com/wiki/DB_Session/ ou http://codeigniter.com/wiki/OB_Session/ pour le stockage données dans une base de données –

+4

Pas bonne pratique à frapper DB encore et encore pour les données communes –

8

Ne pas stocker de grandes quantités de données dans une session; il sera chargé dans la mémoire du script à chaque requête.

Utilisez plutôt des fichiers ou des bases de données, en connectant les données à la session en utilisant l'ID de session.

3

Oui, vous devrez utiliser une base de données. Oui, la limite de 4 Ko est une limite de navigateur pour les tailles de cookies, telle que choisie par Netscape il y a une dizaine d'années. Il est généralement recommandé de conserver les cookies de petite taille, car chaque en-tête de requête d'un objet sur un serveur (pour le même domaine) enverra ce cookie. En outre, une bonne astuce pour CodeIgniter concernant les tables de session de base de données, définissez le type sur MEMORY, afin que les sessions soient stockées en RAM plutôt qu'en disque, ce qui rend votre site plus rapide (moins de lectures sur le site). Vous perdrez les données de session au redémarrage du serveur, mais en attendant un redémarrage, ce type d'informations n'est généralement pas très utile.

SQL pour créer la table CodeIgniter MySQL:

CREATE TABLE IF NOT EXISTS `ci_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) 
); 

CodeIgniter Options PHP (en application/config/config.php):

$config['sess_cookie_name']  = 'ci_session'; 
$config['sess_expiration']  = 7200; 
$config['sess_encrypt_cookie'] = FALSE; 
$config['sess_use_database'] = TRUE; 
$config['sess_table_name']  = 'ci_sessions'; 
$config['sess_match_ip']  = FALSE; 
$config['sess_match_useragent'] = TRUE; 
$config['sess_time_to_update'] = 300; 
1

@all il est même pas une bonne pratique Appuyez à nouveau sur db & pour les données communes, bien que Session puisse servir à cela. Je recommande d'utiliser PHP native session à cet effet voir ici comment vous pouvez utiliser PHP Native Sessions dans CI Replacing CI session with PHP Native Session

+0

quand j'ai essayé cela, je reçois cette erreur: Une erreur a été rencontrée Classe inexistante: Session – dapidmini

Questions connexes