2012-02-17 4 views
1

Beaucoup de mes contrôleurs ont des fonctions qui ressemblent à ceci. Quelle est la meilleure mesure à prendre avec CI lorsqu'une session est terminée et qu'une fonction comme celle-là est appelée?Gestion des sessions expirées

$this->foo_model->create_bar($this->session->userdata('userid'), $bookId); 
+0

* Beaucoup de mes contrôleurs ont des fonctions ... * suggère immédiatement que vous ne suivez pas les paradigmes DRY (Ne vous répétez pas). Vous devriez être capable d'avoir cette logique en un seul endroit. Envisagez d'utiliser l'héritage du contrôleur pour que le contrôleur principal prenne en charge la gestion des sessions et que vos contrôleurs individuels n'en aient pas besoin. Voir [ce post] (http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-base-Classes-Keeping-it-DRY) –

Répondre

3

Je ne comprends pas bien votre question peut-être, mais quand vous appelez $this->session->userdata('something') pour une session a expiré il retournera simplement FALSE. Donc, la meilleure méthode serait de vérifier si la variable n'est pas FALSE? Comme vous le feriez avec une autre variable qui pourrait ne pas être la valeur que vous voulez:

if($this->session->userdata('userid')){} 
//or check it into the model's method, wherever you prefer 

Où et quand faire cela dépend fortement de votre conception. Si vous avez toujours besoin de faire la même vérification, vous pouvez en faire une bibliothèque ou une fonction de modèle, de sorte que vous avez juste besoin d'écrire votre code une fois et d'appeler cette méthode. Si vous en avez besoin avant toute chose, vous pourriez envisager de le placer dans le constructeur, ou, comme l'a suggéréJordan Arsenault, créer un parent MY_Controller qui fait la vérification, et tous vos contrôleurs réguliers l'étendent. Vraiment, cela dépend de votre architecture et vous n'avez pas fourni suffisamment d'informations pour y répondre.

Tout ce que je peux dire est de faire vos méthodes tolerants de défaut, vérifiez toujours la valeur correcte avant d'alimenter le reste de votre code (si une session a expiré brise votre flux de travail)

0

Vous pouvez utiliser des cookies pour relancer une session expirée .Par exemple, vous pouvez créer un jeton pour les utilisateurs lorsqu'ils se connectent à votre application. Ce jeton possède un ID utilisateur associé que votre application connaît globalement puis enregistre un cookie sur la machine utilisateur contenant le jeton. Chaque fois que la session expire demande le client cookies et voir si ce cookie est disponible puis avec son ID utilisateur recréer la session.if il n'y a pas de jeton disponible rediriger votre utilisateur vers une page lui indiquant ce qui s'est passé et lui demander de se connecter à nouveau. Lorsque l'utilisateur se déconnecte, supprimez le token et le cookie

+0

Oui, mais si le cookie n'est pas là le code ci-dessus va probablement produire un erreur, donc je ne pense pas que ce soit une solution au problème. – Mischa

+0

Comme je l'ai dit si aucun cookie n'est disponible ou si les cookies ne sont pas activés côté client, vous devez rediriger l'utilisateur vers une page lui indiquant ce qui s'est passé et lui demander de se connecter à nouveau. – Beatles1692

+0

Vous avez raison, désolé. La raison pour laquelle j'ai commenté était que je pensais persister une session dans les cookies est liée, mais ne répond pas à la question. – Mischa