Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/07/2007, 15h35   #1
Membre chevronné
 
Inscription : janvier 2006
Messages : 918
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 918
Points : 735
Points : 735
Par défaut [Cookies] La fonction file_get_contents() et les sessions

Bonjour

J'ai l'impression que la fonction file_get_contents() utilisée sur une URL n'utilise pas les données contenues dans la session présente.
Ai-je raison, et dans ce cas, comment faire pour que la fonction utilise la session en cours ?
Je pense passer par une variable en GET, mais c'est un peu bourrin, et j'aimerais mieux utiliser une autre solution.

Merci d'avance
guidav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2007, 15h58   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Si vous souhaitez (ré)utiliser une session, il faut avec les fonctions fopen/file_get_contents, employer le quatrième paramètre (le contexte) de cette fonction pour spécifier les entêtes selon vos besoins. Des extensions comme cURL vous permettrait certainement de vous faciliter la tâche.

Tout cela dépend de la configuration du serveur distant (transmission de l'identifiant par cookie et/ou par réécriture des URL et formulaires) et de ce que vous cherchez précisément à faire.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2007, 17h36   #3
Membre chevronné
 
Inscription : janvier 2006
Messages : 918
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 918
Points : 735
Points : 735
Merci beaucoup pour la réponse, je ne connaissais pas les contextes.
Par contre, j'ai beau regarder la documentation php, je ne vois pas comment insérer une session dans un contexte. Y a-t-il un moyen de transmettre les variables de session d'un seul coup, ou dois-je les passer en POST ?
guidav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2007, 17h58   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
La session n'existe que côté serveur à l'opposé d'un cookie. Par conséquent, c'est son identifiant que l'on transmet à chaque requête et non son contenu. Cela peut être fait par cookies (il y a une entête HTTP pour les cookies si je ne m'abuse) ou par la méthode GET ou POST suivant la configuration du serveur auquel vous vous adressez (voir les valeurs des directives session.use_cookies, session.use_only_cookies et session.use_trans_sid).

Que cherchez-vous à faire exactement ? A consulter une page distante requérant au préalable l'ouverture d'une session sur ce serveur ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2007, 18h12   #5
Membre chevronné
 
Inscription : janvier 2006
Messages : 918
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 918
Points : 735
Points : 735
En fait, j'ouvre par un script php plusieurs pages du même serveur, qui génèrent du contenu que je vais écrire dans des fichiers.
L'objet de ce script est de pouvoir générer des fichiers imprimables sous excel (via xlhtml) de l'intranet consulté par l'utilisateur.

Exemple : je consulte http://serveur/index.php?page=ensemble.php et j'obtiens un seul fichier excel contenant 3 onglets page1, page2 et page3. Ces pages sont également consultables sous la forme http://serveur/index.php?page=page1 (chacune des pages étant appelée par ensemble.php)

Le serveur appelant et le serveur consulté sont donc le même dans mon cas, et les sessions contiennent les variables nécessaires à la consultation (page demandée, date, devise, etc).

Si j'ai bien compris, en transmettant l'id de session, je vais pouvoir demander à la page d'utiliser la même session dans les 3 pages appelées.
guidav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2007, 18h20   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par guidav
Le serveur appelant et le serveur consulté sont donc le même dans mon cas, et les sessions contiennent les variables nécessaires à la consultation (page demandée, date, devise, etc).
Une simple inclusion ne suffit pas en ce cas ?

Citation:
Envoyé par guidav
Si j'ai bien compris, en transmettant l'id de session, je vais pouvoir demander à la page d'utiliser la même session dans les 3 pages appelées.
Oui c'est l'idée puisque les sessions fonctionnent ainsi et restent basées sur le serveur. C'est le seul moyen de retrouver votre session (et donc les informations qu'elle contient) entre chacun de vos appels (requête pour être précis, le protocole HTTP étant sans état).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2007, 18h30   #7
Membre chevronné
 
Inscription : janvier 2006
Messages : 918
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 918
Points : 735
Points : 735
Citation:
Envoyé par julp
Une simple inclusion ne suffit pas en ce cas ?
Mon site fonctionne avec une seule page index.php, les pages contenant les données sont appelées par cette page sous la forme
index.php?page=mapage.php
Certaines données à exporter sont générées par index.php (données génériques) et d'autres (données spécifiques de l'état consulté) par mapage.php.
Il faudrait donc pouvoir faire des inclusions avec des arguments, mais je crois que ce n'est pas possible.
C'est la raison pour laquelle je me suis résolu à passer par des file_get_contents, qui ont l'avantage de réinitialiser bien proprement toutes mes variables de consultation lors de chaque requête.

Merci beaucoup pour le coup de main, je pense que je vais pouvoir m'en sortir avec un code du genre
Code :
1
2
3
 
$sid = session_id();
file_get_contents("<a href="http://serveur/index.php?page=$p&sid=$sid" target="_blank">http://serveur/index.php?page=$p&sid=$sid</a>");
et sur la page index.php,
Code :
1
2
3
4
 
if(isset($_GET['sid'])) {
  session_id($_GET['sid']);
 }
guidav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/07/2007, 19h12   #8
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Citation:
Envoyé par guidav
Il faudrait donc pouvoir faire des inclusions avec des arguments, mais je crois que ce n'est pas possible.
C'est la raison pour laquelle je me suis résolu à passer par des file_get_contents, qui ont l'avantage de réinitialiser bien proprement toutes mes variables de consultation lors de chaque requête.
Oui c'est vrai on ne peut pas passer des arguments lors d'une inclusion. Cependant, il ne faut pas oublier que le script inclut aura accès aux variables que l'on a définit, par conséquent, on peut "simuler" cet aspect.

Code :
file_get_contents("http://serveur/index.php?page=$p&sid=$sid");
Je pense que c'est un léger bug du forum, mais l'URL de la page suffira. Je vois, du fait que vous restez en local, vous avez simplifié ce passage de l'identifiant (attention tout de même aux éventuels problèmes de sécurité qui peuvent se poser mais ce facteur dépend en partie de la sensibilité de votre application. On en revient pour ainsi dire à une transmission avec session.use_trans_sid activée).

Code :
1
2
3
4
 
if(isset($_GET['sid'])) {
  session_id($_GET['sid']);
 }
Et le session_start après
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/07/2007, 11h13   #9
Membre chevronné
 
Inscription : janvier 2006
Messages : 918
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 918
Points : 735
Points : 735
Merci, j'ai eu beau essayer, je n'ai pas réussi, alors j'ai triché un peu avec ce code :
Code :
1
2
3
4
5
6
7
 
$exclude = array('contents', 'site', 'id', 'chart1', 'chart2', 'referer');
reset($_SESSION);
while (list($key, $val) = each($_SESSION)) {
   $myvars .= !in_array($key, $exclude) ? '&'.urlencode($key).'='.urlencode($val) : '';
}
reset($_SESSION);
Je pense que ma session étant modifiée lors de l'appel de la page, il doit y avoir une boucle infinie quelque part.

Merci du coup de main cependant, j'ai appris pas mal de choses.
guidav est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h17.


 
 
 
 
Partenaires

Hébergement Web