[RESOLU] perte de SESSION en utilisant un programe html ?

marih
Invité n'ayant pas de compte PHPfrance

12 juin 2013, 14:26

Bonjour,
suite de la question "perte de SESSION ".

Soit l'enchaînement suivant par des liens <a href...>:

ProgA.php ==> ProgB.htm ==> ProgC.php

Le progA s'affiche avec des variables de SESSION initialisées.
ProgB s'affiche correctement.
ProgC ne reçoit aucune variable de SESSION.

J'ai transformé ProgB en PHP en rajoutant en tête:
<?
session_start();
$ID = $_SESSION["ID"];
?>
<HTML>
etc...
$ID est vide.
J'ai fait des print de SESSION des vardump... rien !
Visiblement la SESSION est morte !
Savez-vous comment éviter que la SESSION tombe si c'est possible ?
Le Programme html est gros ça m'ennuie de le réécrire en php !

Merci de votre aide

marih
Invité n'ayant pas de compte PHPfrance

12 juin 2013, 14:59

Bonjour, suite...
je précise que j'accepte les Cookies et que register_globals = OFF pour des questions de sécurité.
Quand j'avais ON ça marchait bien.
Merci

Mammouth du PHP | 2278 Messages

12 juin 2013, 15:11

Je n'arrive pas à reproduire le problème.
J'ai connu une situation analogue qui s'est réglée en mettant session_start() comme première instruction
En revanche, je viens de regarder la doc http://fr2.php.net/manual/fr/session.co ... auto-start
et j'ai fait un
phpinfo();
qui me donne session_auto_start à false
Si par hasard ça pouvait aider...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
ViPHP | 2577 Messages

12 juin 2013, 16:00

...
Quand j'avais ON ça marchait bien.
...
Donc ca marchait quand tu pouvais utiliser $_SESSION['ID'] ou $ID (voir $_POST['ID'] ?) indifféremment.
Il doit y avoir un problème de logique dans les affectations $_SESSION['ID'] => $ID et $ID => $_SESSION['ID']

marih
Invité n'ayant pas de compte PHPfrance

12 juin 2013, 17:05

Euréka !

pour que PHP accepte de passer les variables de SESSION à travers le fichier html, il faut rajouter dans le .htaccess de la racine du site les deux lignes suivantes;
AddHandler application/x-httpd-php.html
AddHandler application/x-httpd-php.htm
et alors tout fonctionne !

A+
Bonne journée

Mammouth du PHP | 571 Messages

12 juin 2013, 17:51

Euréka !

pour que PHP accepte de passer les variables de SESSION à travers le fichier html, il faut rajouter dans le .htaccess de la racine du site les deux lignes suivantes;
AddHandler application/x-httpd-php.html
AddHandler application/x-httpd-php.htm
et alors tout fonctionne !

A+
Bonne journée
certainement tu n'as php5 installé chez toi et c'est dommage.
apache sait interpréter n'importe quel code php placé dans des fichiers html ou php pour peu d’entourer son code php avec des :<? ?> t'as pas besoin de dire à apache d’interpréter un fichier html comme un fichier php il sait le faire

marih
Invité n'ayant pas de compte PHPfrance

13 juin 2013, 10:21

Bonjour,
je suis désolé ! j'ai testé trop vite. NON malheureusement ça ne marche toujours pas !
Par ailleurs vérif faite auprès de l'hébergeur la version de php est 5.3.23.
Raz le bol !

marih
Invité n'ayant pas de compte PHPfrance

13 juin 2013, 11:24

Suite de mes tentatives.
Rappel:
PogA.php ==> ProgB.php ==> ProgC.php
Les var de Session passent de A vers B mais pas de B vers C.
Si je shunte le progB et que je vais de A vers C directement, les var passent.
J'en déduis que c'est bien le progB. php qui est un htm transformé en php qui stoppe le session.
Conclusion: je suis bien bloqué !

Mammouth du PHP | 1967 Messages

14 juin 2013, 16:26

Montre nous ton programme B, et dis nous comment tu passe vers C (lien <a> ou bouton formulaire ou ...)
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

marih
Invité n'ayant pas de compte PHPfrance

21 juin 2013, 09:46

Bonjour,
de retour après absence...
Après tests il semble que j'ai trouvé la cause mais je ne comprends pas pourquoi le fait de donner le lien complet détruise la session.

Le lien que j'utilisais dans le programme appelant (ProgB.php) était :
<a href="http://nomdusite.com/Test/ProgC.php3" target="_parent">Accès à ProgC</a>
cela ne fonctionnait pas. J'ai essayé
<a href="ProgC.php3" target="_parent">Accès à ProgC</a>
et ça marche.
Quelqu'un peut-il m'expliquer pourquoi ?
Merci

marih
Invité n'ayant pas de compte PHPfrance

21 juin 2013, 10:08

Suite des problèmes associés à cette question.
Dans d'autres programmes html j'ai utilisé des "Retour" en utilisant le "onClick" suivant:
 <input type='button' value='Retour' name='nom' onClick='javascript:history.back();'>
Quand je l'utilise ce bouton ça casse la session.

Est-il possible de corriger "simplement" ce pb ou faut-il que je transforme tous les programmes en php ?

Merci de vos suggestions.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

21 juin 2013, 20:13

perso je pense que la vérité est ailleurs :mrgreen:


le session php sont, normalement basée sur des cookies.

Les cookies étant valable sur un domaine il doit toujours être présent lorsque tu change de page.

ensuite suivant la façon dont tu t'y prend pour gérer la connexion, ou l'utilisation des sessions il est possible que tu écrase ces infos.
par exemple problème avec register globals à on etc etc.

je vois php3 dans l'extension de ton fichier. On est aujourd'hui à php 5.5, php3 n'est plus supporté depuis relativement longtemps il serait bon de se mettre au gout du jour.

@+
Il en faut peu pour être heureux ......

marih
Invité n'ayant pas de compte PHPfrance

22 juin 2013, 10:00

Moogli merci de ta réponse,
j'avais initialisé une autre question semblable mais celle-ci était plus précise. Désolé !

Ici j'utilise en effet des programmes qui ont été écrits avec l'extension php3 (bon !) mais le système est en php 5.
Faut-il que je change tous les progs en extension php3 pour les mettre en php ?
En attendant je vais modifier la chaine de ceux qui se plantent pour "voir" si ça change quelque chose ou pas.

Je suis en train de réécrire tous les programmes suite à une destruction par des hackers sur laquelle tu m'as déjà bien aidé.
Les "register_global" sont depuis remis à OFF d'où les pbs (infinis) sur les sessions.
Pour info il y a aussi: "allow_url_fopen" et "allow_url_include" à OFF cela m'a été conseillé par les spécialistes de l'hébergeur pour contrer un peu plus les hackers.

Remarque: le retour par "onclick" cité ci-dessous fonctionne "bien" ailleurs sur le site dans des contextes semblables!!! par contre à ce même endroit qui ne marche pas le "retour" par la flèche en haut à gauche ne fonctionne pas non plus, ce qui est normal car c'est la même fonction qui est utilisée d'après la doc, sauf erreur de ma part.

Le fait d'utiliser l'adressage complet (avec http//etc) ou relatif (sans http//) t'évoque-t-il quelque chose ?

merci encore car je tourne en rond !

C'est vraiment incompréhensible.

marih
Invité n'ayant pas de compte PHPfrance

23 juin 2013, 09:23

Bonjour,
je pense avoir trouvé !

Après tests, le fait d'utiliser php ou php3 ne compte pas. Ce qui parait "normal" car, à mon sens (et heureusement) le compilateur ou l'interpréteur ne doivent pas en tenir compte, est-ce que je me trompe ?

la solution au pb posé dans la question est qu'il faut utiliser en tête des programmes:
session_cache_limiter('private_no_expire');
Un des programmes concernés dans la succession des "retour" ne l'avait pas.

Merci de vous être penchés sur cette question et de m'avoir permis de trouver.