7
votes

$ _Session créé mais il n'y a pas de phpsessid en $ _Server ['http_cookie']

Je rencontre des problèmes étranges avec des variables de session sur mon panier d'achat en ligne PHP / Ajax.

Lorsque je visionne la page, la session est créée et fonctionne dans la page. Ensuite, lorsque je vais naviguer vers une autre page PHP dans le même répertoire, la session est complètement perdue. Ce qui est bizarre est que cela ne se produit qu'une fois . Une fois que l'utilisateur passe à travers ce processus de perdant de la session lors de la section Modification de la page, la session fonctionne dans la totalité du panier.

J'ai commencé à me poster moi-même Var_exports de $ _Session et $ _Server Data sur chaque page . Il semble que lorsqu'une page soit vue pour la première fois, la session existe et contient des données. Cependant, il n'ya pas de phpsessid généré dans la variable $ _Server ['http_cookie']. Sur la navigation vers une autre page, le phpsessid est créé et la session commencera à fonctionner, mais les données de session initiales de la première vue de la première page sont perdues.

existe un moyen de générer un phpsessid si on n'a pas encore été généré pour la session? Ou est ce comportement typique et n'est pas pertinent pour mon problème de perte de session aléatoire? J'utilise php 5.2.

Chaque page du panier démarre exactement de la même manière: xxx

puis en haut de Header_Cart.php est: xxx


9 commentaires

Toutes sortes de lectures amusantes ici . Je ne sais pas si vous avez déjà vérifié cela. Êtes-vous sûr que votre session_start () ne marche pas sur votre premier appel?


Chaque page du panier utilise le même fichier d'en-tête, donc je ne pense pas que ce soit. Peut-être utiliser session_regene_id () si le phpsessid n'est pas défini pourrait aider.


Mais alors vous pourriez perdre vos informations de votre panier car la session change? = /


PHP DOCS dit "session_regenerèrent_id () remplacera l'ID de session actuel par un nouveau et conservera les informations de session en cours." - Je vais essayer d'essayer de voir ce qui se passe


Josh, vous dites une application php / ajax. Visitez-vous vraiment différentes pages de PHP ou avez-vous un ajax tirer le contenu sans faire une charge de page? En outre, passe l'identifiant de la session à travers l'URL une contrepartie?


Je vis vraiment différentes pages PHP, l'AJAX est contenu dans les pages. session_regenerèrent_id () N'a pas réparé - il a renommé l'identifiant de la session à chaque fois qu'il a été appelé, mais les données de session de la première page n'ont pas été maintenues. C'est presque comme s'il lisait deux sessions différentes. Sur la première page, une session est créée et fonctionne une fois (je suis en mesure d'utiliser Session_ID () pour saisir l'ID sur la vue de première page). Mais ensuite sur la page suivante, il crée une nouvelle session avec un identifiant différent. Ce deuxième identifiant est utilisé sur chaque page à partir de ce point.


Vous devriez vraiment fournir votre code de session


Vient de mettre à jour la question pour inclure le code de session


Je suis venu à comprendre que le problème est que le navigateur reconnaisse Mydomain.com et www.mydomain.com en tant que domaines distincts. Pour cela, il enregistre deux sessions distinctes. Quelqu'un connaît une solution pour les traiter comme un domaine sans avoir à rediriger www.mydomain.com à Mydomain.com ou vice versa?


3 Réponses :


1
votes

Avez-vous vérifié qu'il n'y a pas de sortie avant votre appel à session_start ()? (Pas même un caractère d'espace blanc!).

Les en-têtes HTTP ne peuvent pas être envoyés après que des sorties ont été rinchies, ce qui pourrait entraîner la tentative de dire au client le cookie de session initiale échouer.


0 commentaires

1
votes

Basculez-vous entre http: et https:? Ils sont parfois traités comme deux domaines distincts et une clé ne peut pas être partagée entre elles.


1 commentaires

Les deux pages que je passe entre les deux sont à la fois http: //. Je passe à https: // lorsque je passe à la page de commande, mais la session est perdue entre les deux pages http: // pages.



1
votes

s'avère qu'il reconnaissait Mydomain.com et www.mydomain.com comme des sessions distinctes et stockait 2 biscuits avec 2 phpsessids différents.

J'ai ajouté cela à mon fichier .htaccess pour toujours rediriger MyDomain.com/shop à www.mydomain.com/shop pour HTTP et HTTPS. P>

RewriteEngine On

#force http://www. to make sure SESSION data is always the same
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{REQUEST_URI} shop
RewriteRule ^(.*)$ http://www.mydomain.com/shop/$1 [R,L]

#force https://www. to make sure SESSION data is always the same
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{REQUEST_URI} shop
RewriteRule ^(.*)$ https://www.mydomain.com/shop/$1 [R,L]


0 commentaires