2010-12-08 16 views
1

J'ai un projet Code Igniter qui utilise des sessions sauvegardées dans une base de données. L'application Web est protégée par un mot de passe, ce qui signifie que j'ai un contrôleur abstrait qui vérifie si l'utilisateur est connecté avant de lui permettre de voir toutes les pages, à l'exception du formulaire de connexion.Code Igniter - comment rediriger l'utilisateur après la connexion?

Bien que je n'ai eu aucun problème à implémenter ceci, j'ai de la difficulté à comprendre comment faire en sorte que l'application redirige l'utilisateur vers la page qu'il voulait voir s'il devait d'abord se connecter.

Comment ça se passe: l'utilisateur est déconnecté et saisit une URL. L'application détecte qu'il n'est pas connecté, alors envoyez-le à la page de connexion et créez une ligne dans la table ci_session. En même temps, je stocke l'URL que l'utilisateur a saisie dans l'objet de session en utilisant soit flashdata soit userdata. Mon problème est qu'une fois que l'utilisateur se connecte, l'application va créer une nouvelle ligne dans la base de données, ce qui signifie une nouvelle session, en ignorant complètement les valeurs que j'ai stockées précédemment.

Est-ce que ce ne devrait pas être une ligne par session?

+1

Hmm. [Cette réponse] (http://stackoverflow.com/questions/2130361) semble suggérer que les choses devraient fonctionner comme vous l'attendez, n'est-ce pas? –

Répondre

0

a résolu le problème.

Mon problème n'était pas comment rediriger ou comment stocker des données. Mon problème était l'application créant deux sessions par demande.

J'ai changé le nom de mon cookie en quelque chose qui n'incluait pas les underscores et voila, fixed. Une session par demande et tout fonctionne comme il se doit.

0

Vous pouvez utiliser quelque chose comme ça.

Lorsque l'utilisateur tente d'accéder à une page comme

http://test.com/userpage.php 

S'il est pas connecté, le rediriger vers

http://test.com/login.php?redirectpage=userpage.php 

(Cette redirection sera effectuée par userpage.php après avoir vérifié la l'état de connexion du cookie ou de la session.)

La page de connexion a la valeur "redirectpage" et une fois que l'utilisateur se connecte à la page de connexion, le rediriger vers la page qu'il était précédemment tr ying à visiter.

Vous devrez vérifier l'état de connexion de l'utilisateur dans toutes les pages que vous avez besoin que l'utilisateur soit connecté.

2

L'URL CI Helper a une fonction de redirection que vous pouvez utiliser. http://codeigniter.com/user_guide/helpers/url_helper.html

Une «redirection d'en-tête» vers l'URI locale est-elle spécifiée? Tout comme les autres fonctions de cette aide, celle-ci est conçue pour rediriger vers une URL locale dans votre site. Vous ne spécifierez pas l'URL complète du site, mais plutôt simplement les segments d'URI vers le contrôleur que vous souhaitez diriger vers. La fonction construira l'URL en fonction de vos valeurs de fichier de configuration.

Le second paramètre facultatif vous permet de choisir entre la méthode "location" (par défaut) ou la méthode "refresh". L'emplacement est plus rapide, mais sur les serveurs Windows, cela peut parfois poser un problème. Le troisième paramètre facultatif vous permet d'envoyer un code de réponse HTTP spécifique. Il peut être utilisé par exemple pour créer des redirections 301 à des fins de moteur de recherche. Le code de réponse par défaut est 302. Le troisième paramètre est uniquement disponible avec les redirections "location" et non "refresh". Exemples:

if ($logged_in == FALSE) 
{ 
    redirect('/login/form/', 'refresh'); 
} 

// with 301 redirect 
redirect('/article/13', 'location', 301); 
+0

Mon problème ne redirige pas - je peux le faire facilement. Mon problème est de stocker et récupérer l'URL à laquelle l'utilisateur a tenté d'accéder lors de la session. – ruipacheco

+0

Jetez un oeil à la réponse que Matt vous a indiquée dans le commentaire ci-dessous votre question. Vous pouvez stocker l'URL de redirection dans la session. –

+0

J'essaie, mais la classe de session crée deux lignes dans la base de données, une pour la requête effectuée lorsque je suis déconnecté et une autre lorsque je me connecte. Lorsque j'essaie de récupérer l'URL de la session, elle est vide. – ruipacheco

2

Je pense que vous ne comprenez pas comment fonctionnent les sessions entre un navigateur et votre application Web. Lorsqu'un utilisateur ouvre votre page de connexion, un identifiant de session unique est attribué à cet identifiant de code. À moins que votre session ne soit expirée, que ce soit avec force en vous déconnectant ou en raison de vos propres paramètres d'expiration de session, codeigniter ne doit écrire qu'une ligne par session unique dans votre base de données. Assurez-vous que votre variable sess_expiration dans config.php est définie sur quelque chose de réaliste.

Je ne vois pas comment la suppression du trait de soulignement de votre nom de cookie aurait pu corriger cela, car le nom n'a rien à voir avec le fonctionnement des sessions en général.

+0

Je ne le fais pas non plus, mais c'est le cas. Le seul morceau de code que j'ai modifié pour que ce travail supprime le trait de soulignement du nom du cookie. – ruipacheco