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 02/11/2011, 14h06   #1
Membre habitué
 
Avatar de Dionyzos
 
Homme Denis Thevenot
Développeur & Designer Web
Inscription : février 2004
Messages : 124
Détails du profil
Informations personnelles :
Nom : Homme Denis Thevenot
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Développeur & Designer Web

Informations forums :
Inscription : février 2004
Messages : 124
Points : 111
Points : 111
Par défaut Problème session en fonction de l'emplacement de session_start()

Bonjour,

J'ai un problème étrange avec la gestion des sessions :

En fonction de l'emplacement de la fonction session_start(), les sessions sont bien enregistrées ou pas.

Voici ma structure et mon code (simplifié) :

index.php :
Code :
1
2
3
4
<?php
require 'includes/main.php';
[...]
?>

includes/main.php :
Code :
1
2
3
4
5
6
<?php
require 'fonction.php';
 
$user = verifAuthentification();
[...]
?>

includes/fonction.php:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<?php
session_start();
 
function verifAuthentification($login, $pass)
{
[...]
    $_SESSION['login'] = $login;
    $_SESSION['pass'] = $pass;
[...]
}
[...]
?>
Dans ce cas de figure tout fonctionne sur mon PC en local via WAMP.

Par contre si je déplace le session_start() au début du includes/main.php...
includes/main.php :
Code :
1
2
3
4
5
6
7
<?php
session_start();
require 'fonction.php';
 
$user = verifAuthentification();
[...]
?>
includes/fonction.php:
Code :
1
2
3
4
5
6
7
8
9
10
<?php
function verifAuthentification($sLogin = null, $sPassword = null)
{
[...]
    $_SESSION['login']    = $sLogin;
    $_SESSION['password'] = $sPassword;
[...]
}
[...]
?>
...les infos de sessions ne sont plus enregistrées

Pourtant la fonction session_start() retour TRUE dans tous les cas !
Et je n'ai aucun code envoyé avant <?php (pas de caractere ou espace...)
Tous les fichiers sont encodés en UTF8 sans BOM.
Je n'ai aucune erreur dans les logs PHP.

J'aimerais justement que le session_start() soit dans le main.php et plus dans le fichier de fonctions, pour des raisons d'organisation de code, et aussi parce que cela génère une erreur sur mon hébergeur (O2Switch).

Qq'un aurait-il une idée ou une piste pour régler ce problème ?
Merci.
Dionyzos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/11/2011, 13h34   #2
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 663
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 663
Points : 5 390
Points : 5 390
Pour autant qu'il m'en souvienne, l'emplacement du session_start n'a pas d'importance tant qu'il se trouve avant toute instruction (code hors balises <?php ?>, echo, header...) et avant l'utilisation des variables de session.

Tu as essayé de le mettre directement au début de ton index.php ?
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 00h38   #3
Nouveau Membre du Club
 
Inscription : juillet 2011
Messages : 36
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 36
Points : 27
Points : 27
Code :
1
2
3
4
5
6
7
$user = verifAuthentification();
[...]
function verifAuthentification($sLogin = null, $sPassword = null)
{
[...]
    $_SESSION['login']    = $sLogin;
    $_SESSION['password'] = $sPassword;
Ouais ?
Tu fais un appel de la fonction sans paramètre, donc avec $sLogin = null et $sPassword = null, donc session[login] et session[password] recoivent null dans la fonction.

Ca me semble normal ?
Doonge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 17h14   #4
Membre habitué
 
Avatar de Dionyzos
 
Homme Denis Thevenot
Développeur & Designer Web
Inscription : février 2004
Messages : 124
Détails du profil
Informations personnelles :
Nom : Homme Denis Thevenot
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Développeur & Designer Web

Informations forums :
Inscription : février 2004
Messages : 124
Points : 111
Points : 111
Citation:
Envoyé par Doonge Voir le message
Code :
1
2
3
4
5
6
7
$user = verifAuthentification();
[...]
function verifAuthentification($sLogin = null, $sPassword = null)
{
[...]
    $_SESSION['login']    = $sLogin;
    $_SESSION['password'] = $sPassword;
Ouais ?
Tu fais un appel de la fonction sans paramètre, donc avec $sLogin = null et $sPassword = null, donc session[login] et session[password] recoivent null dans la fonction.

Ca me semble normal ?
En fait j'ai simplifié grandement mon code part rapport à ce qu'il est réellement, pour que ca soit plus simple à comprendre, et j'ai merdé dans mon 1er post en simplifiant, mais mon code réel est bon, les variables sessions sont bien renseignées dans un des IF de ma fonction complète.

En fait la fonction verifAuthentification est toujours écrite pareil, à la différence de ce qu'indique mon 1er post (désolé pour l'erreur de frappe, mais je sais pas comment on édite son post ).

Bref, cela indique bien que le pb ne vient pas d'une erreur dans ma fonction, mais du fait que je l'appelle pas depuis le même endroit.

Je sais que mon problème est vraiment pas simple

En gros, pour résumer plus simplement, si je déplace mon session_start() de fonction.php à main.php, sans rien modifier d'autre, ca ne marche plus.
Dionyzos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 17h17   #5
Membre habitué
 
Avatar de Dionyzos
 
Homme Denis Thevenot
Développeur & Designer Web
Inscription : février 2004
Messages : 124
Détails du profil
Informations personnelles :
Nom : Homme Denis Thevenot
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Développeur & Designer Web

Informations forums :
Inscription : février 2004
Messages : 124
Points : 111
Points : 111
Citation:
Envoyé par Celira Voir le message
Tu as essayé de le mettre directement au début de ton index.php ?
Bah, l'objectif est de ne justement pas le répéter systématiquement dans toutes les pages "parentes", et donc de l'avoir dans le main.php qui lui est appelé tout le temps.
Dionyzos est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h47.


 
 
 
 
Partenaires

Hébergement Web