2011-05-04 4 views
3

Nous avons résolu un problème que nous avions avec un navigateur en raison de l'impossibilité de se connecter aux sous-domaines en ajoutant la ligne de code suivante.Pourquoi mes sessions ne sont-elles pas enregistrées au hasard?

ini_set('session.cookie_domain', '.'.get_domain('http://'.$_SERVER['SERVER_NAME'])); 

La fonction get_domain obtient le domaine d'un site de sorte que "subdomain.com" renvoie "domain.com". Nous ajoutons un "." afin que nos sessions soient bonnes dans tous les sous-domaines.

Ce résolu le problème de ne pas être en mesure de se connecter, mais le problème est maintenant que depuis que nous avons ajouté cette ligne de code nous au hasard pas être en mesure de se connecter parce que les sessions ne sont pas créés et sont juste NUL.

Je dis au hasard parce que je ne peux pas comprendre ce qui le cause. Un jour, un utilisateur peut se connecter, il tente de se connecter le jour suivant et cela ne fonctionne pas. Effacer les cookies résoudra généralement le problème. Une idée de ce que je pourrais faire de mal? J'ai essayé de googler mais je n'ai rien trouvé qui ait aidé, nos utilisateurs sont frustrés et je manque d'idées. Toute aide est vraiment appréciée.

Répondre

0

Il s'avère que j'avais oublié de changer ce réglage dans l'une des rubriques qui jetait tout hors de propos.

(Désolé pour répondre à ma propre question, tout le monde a voté en pour l'aide)

1

La suppression des cookies résoudra généralement le problème.

On dirait qu'il y a un problème de mise en cache pour moi mais ce n'est qu'une supposition. De votre seule description, il est difficile de dire si le problème se situe du côté du navigateur ou du côté du serveur.

La meilleure suggestion que je peux vous faire est d'implémenter un test de cookie sur le formulaire de connexion. Avant que l'utilisateur entre réellement ses informations d'identification, vous définissez un cookie de test et redirigez vers la même page avec un paramètre get supplémentaire test. Si la page est demandée avec ce paramètre supplémentaire test, il est vérifié si le cookie de test a été correctement défini.

Autoriser uniquement à se connecter si le test réussi. Sinon, donnez un message d'erreur et informez l'utilisateur du problème technique.

Ceci peut vous aider à identifier quand le problème se produit réellement. De plus, vous pouvez même ajouter plus d'informations du côté serveur en cas d'erreur qui pourrait vous aider à déboguer le problème.

+0

J'utilise des cookies de session et non manuellement la définition de cookies via la fonction set_cookie. Êtes-vous en train de dire que je devrais voir si la création d'un cookie est possible avant de se connecter? Je ne comprends pas vraiment votre suggestion de test GET. – Gazillion

+0

Le test consiste simplement à tester si la configuration d'un cookie fonctionne et à n'offrir un formulaire de connexion que si le paramétrage d'un cookie a fonctionné. Pour tester si un cookie peut être défini, vous devez définir le cookie, faire une demande supplémentaire au navigateur et dans cette requête supplémentaire, vérifier si le cookie a été défini. Le cookie de test est un autre cookie puis le cookie de session. Est-ce que vous définissez beaucoup plus d'autres cookies? – hakre

+0

Merci, mais il s'avère que j'avais oublié de faire le changement dans l'un de mes en-têtes. Je suis embarrassé. – Gazillion

1

Juste pour règle dehors s'il vous plaît essayer de définir le domaine avec une constante de chaîne plutôt que de dériver avec get_domain() quelque chose comme ceci:

ini_set('session.cookie_domain', '.foo.com'); 

Regardez bien dans votre navigateur pour les cookies à la fois mis sur .foo.com et tout les anciens qui pourraient être mis (ou étant mis) sur sub.foo.com

J'ai vu quelques problèmes semblables à celui que vous avez décrit en raison de certains biscuits n'étant pas visibles aux différents serveurs. Le problème est le long des lignes que sub.foo.com pourrait avoir une entrée de cookie déjà définie que vous n'avez pas supprimée et seulement elle sera capable de le voir. Un nouveau cookie est défini à partir de www.foo.com sur .foo.com car www.foo.com est incapable de voir le cookie .

J'espère que cela avait du sens ...

+0

Donc vous pensez que www.foo.com pourrait ne pas voir les cookies de sub.foo.com? J'essaie de trouver exactement ce que je cherche avant de coder en dur la valeur parce que nous avons actuellement ~ 45 sites Web qui se déroulent à partir de ce script de connexion avec un nom de domaine différent. Coder en dur cette valeur pourrait bloquer tout le monde (ce qui signifie que je devrais probablement le faire pendant les heures creuses :)) – Gazillion

+0

Hmmm s'avère que j'avais oublié de faire le changement dans un de mes en-têtes (* facepalm *) qui causait des problèmes selon d'où vous veniez. – Gazillion

Questions connexes