2009-05-18 7 views
2

J'ai 2 pages: login.php et index.php. Les deux pages commencent parLa session PHP ne fonctionne pas en PHP5

session_start(); 

Quand je mis

$_SESSION['user'] = "name"; 

dans login.php et que d'ouvrir index.php, mon objet de session est vide. Comment venir?

EDIT:

Je trouve le problème: IE 7. Je devais grand accès à mon domaine. Cependant, je pensais qu'une session est stockée sur le serveur, au lieu du client? Alors pourquoi ai-je un grand accès IE à mon domaine? (http://www.pcwindowstips.com/2007/09/04/how-to-enable-cookies-in-internet-explorer-7/)

+1

c'est trop peu d'informations. Avez-vous des cookies activés? – SilentGhost

+0

Avez-vous des rapports d'erreurs activés? Y a-t-il des erreurs/avertissements? –

+0

Bon point. Je vérifie dans FireFox et là ça marche. Cependant, dans IE 7, cela ne fonctionne pas. Peut-être quelque chose à faire avec les cookies? – Martijn

Répondre

6

Je pensais qu'une session est stockée sur le serveur, au lieu du client? Alors pourquoi ai-je IE accorder l'accès à mon domaine? (http://www.pcwindowstips.com/2007/09/04/how-to-enable-cookies-in-internet-explorer-7/)

Les travaux des sessions façon est qu'un cookie de session est enregistrée pour le site, qui contient votre ID de session. La seule façon dont le serveur sait qui vous êtes est lorsqu'il lit le cookie d'identification de session à chaque chargement de page. Toutes les données $ _SESSION sont stockées sur le serveur pour chaque utilisateur, mais le cookie doit être défini pour que le serveur sache quelles données $ _SESSION doivent être récupérées.

C'est aussi la raison pour laquelle vous pouvez essentiellement "devenir" un autre utilisateur si vous obtenez son cookie d'identifiant de session.

+0

aah thnx, ça rend les choses claires! Mais existe-t-il une solution de contournement pour IE7 pour ce problème? – Martijn

+1

juste activer les cookies. la plupart des sites sur le web aujourd'hui seront brisés avec des cookies désactivés de toute façon, je ne pense pas que ce soit un cas dont vous avez à vous soucier. – Kip

1

Pas beaucoup d'informations ici, je vais essayer d'utiliser mes pouvoirs psychiques.

Après que l'utilisateur se connecte, définissez-vous la session var et redirigez l'utilisateur vers index.php à l'aide d'un en-tête http? Si c'est le cas, je ne pense pas que le cookie de session soit envoyé à l'utilisateur. Si tel est le cas, les solutions sont:

  1. appel session_start() lorsque le formulaire de connexion est affichée au départ (et pas seulement après les messages de l'utilisateur revenir); ou:
  2. afficher une "connexion réussie!" message, puis rediriger avec un meta-refresh, ou simplement fournir un lien vers index.php.

Vous pouvez également essayer de vider l'ID de session sur les deux pages, pour voir si vous commencez en quelque sorte une nouvelle session:

echo 'Session ID is: ' . SID . "<br/>\n" 
1

Vous devez vérifier si les cookies sont activés et rien (ceci inclut des lignes vides au début ou à la fin de l'archive) envoyé au navigateur avant d'appeler session_start().

2

Les explorateurs Internet ont une politique de cookie plus stricte que la plupart des autres navigateurs. Vérifiez votre session cookie parameters (voir aussi session_get_cookie_params()) et essayez de remplacer les valeurs par défaut par des valeurs explicites lorsque cela est possible. En outre, vous pouvez envoyer une [politique P3P faux] (http://msdn.microsoft.com/en-us/library/ms537343(VS.85).aspx) pour satisfaire les explorateurs Internet.

+0

Thnx, quand je fais print_r (session_get_cookie_params) Je vois ceci: Array ([lifetime] => 0 [chemin] =>/[domaine] => [secure] => [httponly] =>) Comment puis-je faire ce travail ? – Martijn

+0

Et comment envoyer une fausse politique p3p? Je ne peux pas le trouver sur Google – Martijn

+0

Définissez 'session.cookie_domain' sur le domaine dans lequel vous souhaitez utiliser les cookies. Et la politique P3P compacte peut être envoyée avec la fonction' header'. – Gumbo

2

Peut-être cette variable dans php.ini est la cartographie à un chemin existant

session

.save_path = "c:/wrong/path"

2

Voici quelque chose qui m'est arrivé qui pourrait éclairer quelqu'un. Ma session ne fonctionnait pas correctement. IE 8 et Firefox perdaient les informations de session.

J'ai inclus un fichier. Ce fichier inclus a eu un retour de chariot supplémentaire après le suivi &? Ce retour chariot a démarré la session. Je mets session_start après l'include. BOOM.