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 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. P> 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. P> Chaque page du panier démarre exactement de la même manière: p> puis en haut de Header_Cart.php est: p>
3 Réponses :
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!). P>
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. P>
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. P>
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.
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]
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 () code> 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?