Session - Header

Résolu/Fermé
Zak - 20 août 2009 à 20:14
 Zak - 21 août 2009 à 21:36
Bonjour à tous,

J'ai fait un site il y a plus de 4 ans et il s'est mis à bugger sur la partie session, surement du à une évolution des versions php.
J'ai lu pas mal de sujets à propos des sessions (sur ce site et d'autres) et fait plusieurs tests mais j'ai toujours des questions et surtout mon problème :(

Déjà, êtes vous d'accord qu'à chaque utilisation des sessions dans un de nos fichiers .php (par exemple pour récupérer une variable $_SESSION['login']), il faille rappeler la fonction session_start() (d'après php.net c'est le cas).

Ensuite: mes fichiers sont structuré comme suit:
(exemple identification.php)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<?php
session_start();
include ("pack.php");

$insertion = $_REQUEST['insertion'];
if(!empty($insertion)){
$login = $_REQUEST['login'];
$code = $_REQUEST['code'];

if(droit_admin($login, $code))
{
$_SESSION['login'] = $login;
$_SESSION['pass'] = $code;
header("Location: admin.php");
}
else{
header("Location: echec.php");
}
}
else{
$_SESSION=array();
unset($_COOKIE[session_name()]);
session_unset();
session_destroy();
}
haut_de_page(); // mes balise CSS entre autres
?>
</head>
<body>


Et dès l'ouverture de ma balise php je mets mon session_start() (avant tout caractère)
Dois-je le mettre encore plus haut et avant
<!DOCTYPE HTML...
<html>
<head>


J'obtiens les erreurs suviantes
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /homez.145/.../identification.php:4) in /homez.145/.../identification.php on line 5

Warning: Cannot modify header information - headers already sent by (output started at /homez.145/.../identification.php:4) in /homez.145/.../identification.php on line 17


Alors je me dis, est ce parce que j'ai une double déclaration de la balise <head>, dans le fichier puis dans ma fonction haut_de_page() de mon pack.php (ou je déclare meta, balise CSS, ...).
A l'époque cela ne posait pas de soucis.

Ensuite voyant que la fonction header() pouvait poser des soucis, j'ai tester une redirection en javascript et j'ai eu le même style d'erreur, avec l'avantage quand même de passer mon autentification et d'arriver sur ma page admin.php, avec toujours ce warning:
Warning: Cannot modify header information -
headers already sent by (output started at /homez.145/.../admin.php:4)
in /homez.145/.../admin.php on line 9


Voilà j'espère avoir été clair, désolé si je suis redondant mais les réponses précédentes que j'ai tentée de mettre en application ne m'ont pas sauvée.

Bonne soirée et merci au moins de m'avoir lu.
.Zak.

8 réponses

fred_bgt Messages postés 153 Date d'inscription mercredi 31 décembre 2008 Statut Membre Dernière intervention 12 septembre 2009 22
20 août 2009 à 20:18
tu dois mettre session_start() en tout début de fichier, comme ça :

<? session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

...etc
0
Nico_ Messages postés 1219 Date d'inscription vendredi 29 décembre 2006 Statut Membre Dernière intervention 15 mars 2016 189
20 août 2009 à 22:11
bonsoir,

Tu dois mettre session_start() en tout début de fichier, comme ça :

<? session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head> 

Éviter les short tag codé proprement : c'est <?php et non <? ça vous évitera bien des erreurs si vous changer de serveur !
<?php session_start();
?> [...]


bonne soirée
0
Ok merci beaucoup.
Je dois le faire pour chaque fichier ou j'ai un appel de session?
pas seulement sur le premier fichier qui appellera les sessions?
on est d'accord?
0
Utilisateur anonyme
20 août 2009 à 22:04
Pour moi je suis d'accord !!!

A chaque fois que tu veux garder la session, session_start(); avant toute autre chose !!!

Si le problème est résolu, merci de le mentionné sur ton post ! :-)
0
fred_bgt Messages postés 153 Date d'inscription mercredi 31 décembre 2008 Statut Membre Dernière intervention 12 septembre 2009 22
20 août 2009 à 22:40
oui,
tu dois mettre cette déclaration pour chaque fichier
en effet, <?php c'est mieux... sorry
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
avion-f16 Messages postés 19250 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 22 décembre 2024 4 505
20 août 2009 à 22:46
Pour la fonction header, c'est comme session_start : aucun caractère ne doit être afficher avant.
0
Merci pour vos réponse mais ce n'est pas résolue.

quand j'essaye en php, avec la fonction header et que je positionne mon code comme vous l'avez dis:
<?php
session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<?php
include ("pack_anfiide.php");

if(!droit_admin($_SESSION['login'], $_SESSION['pass'])){
header("Location: echec.php");
}
haut_de_page();
?>
</head>
<body>
...


je ne vois pas de changement par rapport à avant. Je n'arrive même pas a passer ma page d'identification.

Quand je test avec du javascript à la palce de header():
echo '<script language="Javascript">
<!--
document.location.replace("http://.../echec.php");
// -->
</script>';


la j'arrive à passer l'authentification, mais jai tjrs les warning que j'ai afficher ds mon premier message (je trouve pas ca clean mais si je désactive juste l'affiche des warning sur le serveur c'est ok a votre avis?)

J'aimerais bien faire sans javascript si je trouvais une solution.
Merci de votre aide.
Et bon début de week end!
0
Nico_ Messages postés 1219 Date d'inscription vendredi 29 décembre 2006 Statut Membre Dernière intervention 15 mars 2016 189
21 août 2009 à 20:00
bonsoir,

essai comme suit :
<?php
session_start();

if(!droit_admin($_SESSION['login'], $_SESSION['pass'])){
header("Location: echec.php");
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<?php
include ("pack_anfiide.php");
?>
</head>
<body> 
0
fred_bgt Messages postés 153 Date d'inscription mercredi 31 décembre 2008 Statut Membre Dernière intervention 12 septembre 2009 22
21 août 2009 à 19:33
pas bon.
as-tu bien mis le session_start() ds tous tes fichiers ?
0
Excellent les gars!!

Solution:
<?php
session_start();
include ("pack_anfiide.php");

if(!droit_admin($_SESSION['login'], $_SESSION['pass'])){
header("Location: echec.php");
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<?php
haut_de_page();
?>
</head>
<body>


Ca marche nickel comme ca et je peux éviter le javascript!

Merci encore énormément à vous tous!
Et un excellent week end!
;)
0