Session PHP ne fonctionne pas
Je suis en train de travailler avec wamp2.0 - PHP 5.3, apache 2.2.11, mais mes séances ne sont pas de stocker des données.
J'ai une page qui accepte un paramètre (version simplifiée) je veux stocker dans une session, donc quand j'arrive
http://www.example.com/home.php?sessid=db_session_id
Le script ressemble:
session_start();
$sessid = @$_GET['sessid'];
if ($sessid) {
$_SESSION['sessid'] = $sessid;
}
var_dump($_SESSION);
et sorties:
array(1) { [0]=> string(13) "db_session_id" }
qui est bien, mais ensuite, quand je vais à lien (sans le sessid paramètre) le $_SESSION
tableau est vide. J'ai tenté de commenter la $_SESSION['sessid'] = $sessid;
ligne avant d'aller à la page sans le paramètre, mais ce n'travail.
J'ai vérifié le session_id()
de sortie et l'id de session reste le même.
Les paramètres de la Session de la fonction phpinfo()
Session Support enabled
Registered save handlers files user
Registered serializer handlers php php_binary wddx
Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_httponly Off Off
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 1000 1000
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.hash_bits_per_character 5 5
session.hash_function 0 0
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path c:/wamp/tmp c:/wamp/tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies On On
session.use_trans_sid 0 0
EDIT:
Les séances sont supprimés par une iframe. Je ne sais pas pourquoi, mais quand
commenté, les séances de travail de l'amende. Chose est, l'iframe est de rester
il y a (ce qui bien sûr est mauvais, mais je ne peux rien faire à ce sujet).
Eh bien...connaissez-vous des solutions de contournement pour obtenir les séances de travail
avec un iframe?
- Est le
COOKIE
définie dans le navigateur? - si vous voulez dire la
$_COOKIE
variable, alors oui, c'est réglé - Attendez, suis-je le seul ici à remarquer que ce script est complètement faux pour l'auteur du but et il fonctionne comme il se doit en fait? Si vous ne définissez pas de $_GET['sessid'] ni $sessid est définie et si l'instruction n'est pas exécutée.
- Eh bien...j'ai d'abord aller à une page, où l'
sessid
EST réglé, donc là aussi si la variable de session est défini (ce qui arrive). Mais les données ne prend pas en rester là. - Ok, maintenant j'ai le sens de cette question. Eeverything semble aller pour le mieux donc, soit vous avez quelques bugs étranges dans votre logiciel ou de votre version simplifiée a également supprimé de votre problème parce que je exécutez le script et il fonctionne très bien pour moi. Avez-vous essayé de lancer le script que vous avez posté? Ce n'est pas une session de problème, mais un problème de script à mon humble avis. Aussi, est votre $_SESSION vide ou contient une chaîne vide? Ce n'est pas la même...
- Semble que vous avez raison. La version simplifiée, en effet, fonctionne très bien. Même le presque non-version simplifiée ne fonctionne pas. Faut chercher le problème ailleurs. Mais il se comporte très étrangement. Lors de savoir ce qu'il se passe, je vais poster là où était le problème.
- Très étrange...j'ai commenté l'ensemble du script (sauf pour le paramètre de session partie obv.) - il a travaillé...puis, sans commentaire, étape par étape, mais ça n'a rien changé et il a travaillé tout le temps, alors maintenant, j'ai complètement inchangé script qui fonctionne...o.O Mais je parie qu'il va arrêter de travailler bientôt
- Avez-vous résoudre ce problème? J'étais sur le point de publier une réponse, mais je ne voulais pas si vous avez déjà pensé à elle. Si vous avez encore besoin d'aide, s'il vous plaît répondre et de me dire aussi quel navigateur vous testez.
- TBH, je ne m'en souviens pas vraiment, c'est plus d'un an et demi depuis que la question a été posée, mais je suppose que j'ai eu de travail, mais ne me souviens pas de la solution
Vous devez vous connecter pour publier un commentaire.
Un cadre, vous pouvez accéder à la session que si c'est par rapport à la même domaine. Par exemple:
Doivent travailler à l'extérieur et à l'intérieur de l'iframe. Si votre problème persiste, essayez:
C'est une vieille question, mais je suis venu ici avec le même problème. Comme la question n'a pas été répondu, ici, il s'agit de ce que j'ai trouvé.
J'ai eu un problème similaire et dans mon cas, le problème était que je n'étais pas d'appel
session_start()
dans toutes les pages où la session a été utilisé. J'ai pensé que je devrais l'appeler uniquement dans la page "login", mais ce n'est pas vrai.En outre, n'oubliez pas que
session_start()
doit être appelée avant que le<html>
tag.Vous devez appeler la commande
session_start();
dans chaque page. Il a travaillé pour moi. Vous devez également appeler cette fonction avant toute sortie (html, de sortie, de même des espaces) est envoyé à l'utilisateur.Si vous avez un problème similaire, je trouve cela assez intéressant de test. Exécuter un peu de demande dans le navigateur et de voir ce que vous obtenez.
De l'auteur: Votre dernier commentaire mentionne que votre script fonctionne - il bon pour vous. Si elle se casse, puis essayer de le morceau de code ci-dessus et laissez-moi savoir ce que vous obtenez.
Aujourd'hui, j'ai passé environ quatre heures, avec $_SESSION ne sont pas enregistrés sur le serveur.
Il s'est avéré être un problème de serveur. Le système (Windows 2003, IIS 6) a utilisé le dossier temporaire par défaut de Windows C:\Windows\Temp\ pour stocker la session. Il l'a créé, mais il était vide.
Pour une raison quelconque, il est juste arrêté de travailler (il n'y avait pas de problème avant). Ma meilleure supposition qu'il atteint une certaine limite ou le dossier contenait simplement trop grand nombre de fichiers.
J'ai trié par session.save_path vers un autre dossier.
http://php.net/manual/en/function.session-start.php
Vous devez mettre quelque chose à l'intérieur de l' $_SESSION tableau global pour enregistrer quoi que ce soit, sinon, c'est vide...
Depuis à tester l'existence de sessid pour l'ajouter à $_SESSION, $_SESSION reste vide.
Essayez quelque chose comme:
$_SESSION
après laif ($sessid) ...
les variables y sont conservées, mais elles ne sont pas détenues à l'intérieur quand je vais à l'autre page sans paramètreJe ne peux que deviner de ce qui se passe là que votre session n'a pas été sauvegardés. Est votre session.save_path -> c:/wamp/tmp une écriture (décocher lecture seule dans les propriétés) dossier? Apache est en cours d'exécution en tant qu'administrateur ou un certain niveau avec suffisamment d'autorisations d'écriture sur ce dossier dans les services dans les outils d'administration du panneau de configuration?
En fait, vérifiez ceci: Session PHP vars ne sont pas maintenus. Essentiellement, exécutez session_id() sur la page en deux fois et de comparer les identifiants de session. Si elles sont différentes c'est que votre navigateur n'accepte pas les cookies de session.
EDIT: Ne savais pas que vous avez déjà fait. ^
Cela peut vous aider. Lien <--- Regardez la deuxième proposition/réponse avec le code de débogage pour la session.
sessid|s:0:"";
, de sorte qu'il est écrit, mais sans les données. C'est étrangevar_dump(session_register('sessid', 'value'))
imprimebool(true)
...
Il pourrait être parce que vous n'êtes pas à l'aide d'un domaine en soi? Dans votre question, vous utilisez example.com cependant, vous développez sur votre machine locale. Je suppose que vous utilisez localhost.
Vous devriez savoir que l'on ne peut placer des cookies sur localhost, voir par exemple: Les Cookies sur localhost avec de domaine explicite
Avez-vous essayé votre code sur un autre hébergeur?
http://blog.perplexedlabs.com/2008/12/21/php-sessions-on-localhost/
Je ne sais pas si c'est la cause de votre problème (l'erreur de suppression
@
semble un peu out-of-place ici...), mais je voudrais simplifier un peu.Ainsi, au lieu de:
Je voudrais utiliser:
En passant, je voudrais aussi faire de la saisie-vérification sur
$_GET['sessid']
pour s'assurer qu'il ne contient que les caractères autorisés.