Session - Header
Résolu
Zak
-
Zak -
Zak -
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.
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
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
<? session_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
...etc
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?
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?
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 ! :-)
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 ! :-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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!
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!
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!
;)
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!
;)
Éviter les short tag codé proprement : c'est <?php et non <? ça vous évitera bien des erreurs si vous changer de serveur !
bonne soirée