Aller au contenu

ovh et les sessions php


Sujets conseillés

Posté

Bonjour,

je viens de m'abonner a ovh 60gp et j'ai un petit probleme, je n'arrive pas a faire fonctionné ma session qui marché en local on diré que ovh n'accepte pas les sessions privé car session_start() met une erreur sur chacune de mes pages et quand je m'indentifié j'ai comme message "Cannot modify header information - headers already sent by (output started at /home.2/mairieve/www/config.inc.php:30) in /home.2/..."

merci de m'aider

Posté

Salut Opanis,

C'est tout simplement parce que ta page a déjà envoyé de l'info vers le navigateur. Il n'est donc plus possible de lancer une session vu que les entêtes ont été envoyées.

session_start() doit impérativement être utilisé tout au début de ta page, avant que tout caractère soit envoyé, même un espace ou une ligne vide.

Le mieux est de commencer en ligne 1 du fichier par

<?php
session_start();
// ton code ici
?>

Dan

Posté

je m'en doute mais le probleme quand je le laisse les sessions marche pas et j'ai comme mesage sur mes autres pages :

Warning: session_start(): Cannot send session cookie - headers already sent

by (output started at /home.2/www/accueilfi2.php:13) in

/home.2/www/config.inc.php on line 2

Warning: session_start(): Cannot send session cache limiter - headers

already sent (output started at /home.2/www/accueilfi2.php:13) in

/home.2/www/config.inc.php on line 2

Posté

Le message "headers already sent" signifie qu'il y a déjà eu des caractères envoyés vers le navigateur avant l'appel à headers(), à set_cookie() ou à session_start().

Il suffit de rechercher à quel endroit tes sources font un écho, ou comme je te l'ai dit de remonter ce code vers la première ligne.

Dan

Posté

Bonjour,

En faite j'ai créer un fichier config.php où se situe la session_start()

config.inc.php

<?php
session_start();
$dureeSession="15";

$hote ="mes code";[COLOR=red] ds la vrai version il sont bien configurer
$login_base ="...";
$pwd ="....";
$base =".....";


function connex_base( $hote, $login_base, $pwd, $base){
$cnx= mysql_connect( $hote, $login_base, $pwd );
if (!$cnx) {
echo "erreur...+";
return false;
}
else{
$cnx_base= mysql_select_db($base, $cnx);
if ( $cnx_base ) {
return $cnx;
}
else{
echo "erreur...";
return false;
}
}
}
?>

Aprés dans chaque page sécurisé de ma session qui nécessite un code pour y aller j'ai une entete.inc.php

<?php
session_start()
require_once( "../config.inc.php" );
$connexion = connex_base( $hote, $login_base, $pwd, $base );

function valid_session($session, $connexion) {
$id = session_id();
$query = "SELECT debut from session WHERE id_session='$id' AND clos='N' AND now() BETWEEN debut AND fin";
$result = mysql_query($query, $connexion);
$nb = mysql_num_rows($result);
if ( $nb>0 ) {
$ligne = mysql_fetch_array($result);
return $ligne[debut];
}
else{ return 0;}
}


function maj_session( $debut, $connexion,$dureeSession ) {
$id=session_id();
$query ="UPDATE session SET fin = DATE_ADD(now(), interval ".$dureeSession." minute)";
$query .="WHERE id_session= '$id' ";
$query .="AND clos='N' AND debut = '$debut'";
mysql_query($query, $connexion);
$result=mysql_query("select fin FROM session WHERE id_session= '$id' AND debut = '$debut' ");
$ligne= mysql_fetch_array($result);
return $ligne[fin];
}

/* Programme pricipal */


$debut = valid_session( $session, $connexion );

if ( $debut == 0 ) {
header("location: erreur.htm");
}
else {
$fin = maj_session($debut, $connexion, $dureeSession);
}



?>

puis enfin j'ai un fichier d'authentification :

<?php
require("config.inc.php");
$connexion = connex_base($hote, $login_base, $pwd, $base);

// Login et mot de passe en provenance de connexion.html
$login = $_POST['login'];
$pwd = $_POST['pwd'];


#Fonction de verification du login/mdp
function verif_auth($login, $pwd, $connexion ) {
$query = "select idp from user ";
$query .= "where login='" . $login . "' ";
$query .= "and pass = md5('".$pwd."')";
$result = mysql_query($query);
$nb = mysql_num_rows( $result);
return $nb;
}

function session_vide( $connexion ) {
// la table sessions est vide?
$query = "SELECT * from session";
$result = mysql_query($query, $connexion);
$nb=mysql_num_rows( $result);
return $nb;
}


function en_cours( $login, $connexion ) {
$id=session_id();
$query = "SELECT * from session WHERE id_session='$id' ";
$query .= "AND clos='N' AND login='$login' ";
$query .= "AND now() BETWEEN debut AND fin ";
$result = mysql_query($query, $connexion);
$nb=mysql_num_rows($result);
return $nb;
}

function clos_anc_session( $connexion ) {
$query = "SELECT id_session, debut from session WHERE clos='N' AND now() > fin ";

$result = mysql_query($query, $connexion);

$nb=mysql_num_rows($result);

while ($ligne=mysql_fetch_array($result) ) {
$query_clos = "UPDATE session SET clos='O'";
$query_clos .= "WHERE id_session='$ligne[id_session]' AND debut='$ligne[debut]'";
mysql_query($query_clos, $connexion);
}
return $nb;
}

function nouv_session( $login, $connexion, $dureeSession) {
$id=session_id();

$query = "INSERT INTO session (login, debut, id_session, fin) ";
$query .= "VALUES ('$login', now(), '$id', DATE_ADD(now(),INTERVAL ".$dureeSession." MINUTE) )";
$result = mysql_query($query, $connexion);

return $result;
}

/* Programme principal */

$n = clos_anc_session( $connexion );

if( verif_auth( $login, $pwd, $connexion ) == 1 ){
$sessvide = session_vide($connexion);
$sessactive = en_cours( $login, $connexion );

if( $sessactive == 0 or $sessvide == 0 ){
$ok = nouv_session( $login, $connexion, $dureeSession);
if( $ok ){
header("Location: admin.php".SID);
}
}
if( $sessactive > 0 ){
header("Location: admin.php".SID);
}
}
else{
//echo "Erreur lors de l'authentification";
header( "Location: erreur.htm");
}

?>

Posté

Dans ton fichier entete.inc.php tu lances session_start() puis fais un include de config.inc.php qui lance lui aussi session_start() . C'est un session_start() de trop :!:

Ne cherches pas plus loin :whistling:

Dan

Posté

je vais me lancer dans une réponse, jespere que je dirais pas de conner........bref. Tu fais un session_start puis un include de config.php qui contient egalement session_start. Si j'étais fort en php je dirais que le probleme vient de là, con que je sois pas fort ! lol

session_start()
require_once( "../config.inc.php" );

Posté

Vu que quand je laisse le session_start(); dans le config cela pose un probleme sur toute mes pages comme je l'explique dans mon premier message, j'ai donc mis ce code dans l'entete mais aucune page s'ouvre mais la session est bien créer dans la base de donnée

Posté

Assure-toi de ne pas avoir le moindre caractère avant le <?php du fichier de config.

Il faut que ce soit en tout début de fichier !

Posté

l'erreur me semble venir de la ligne

header( "Location: admin.php"); d'aprés ce qu'il m'affiche mais je la trouve pas :huh:

Posté

C'est la dernière ligne du troisième fichier. Je n'avais pas lu aussi loin :)

Effectivement, tu ne peux pas faire un header("location:...."); après le session_start(), vu que le session_start() a déjà envoyé les entêtes de session.

Remplaces cette ligne par include("admin.php") cela devrait mieux marcher.

Pense à supprimer le session_start() du fichier admin.php ...

Dan

Posté
je m'en doute mais le probleme quand je le laisse les sessions marche pas et j'ai comme mesage sur mes autres pages :

Warning: session_start(): Cannot send session cookie - headers already sent

by (output started at /home.2/www/accueilfi2.php:13) in

/home.2/www/config.inc.php on line 2

Warning: session_start(): Cannot send session cache limiter - headers

already sent (output started at /home.2/www/accueilfi2.php:13) in

/home.2/www/config.inc.php on line 2

<{POST_SNAPBACK}>

A priori, l'erreur vient de là :

output started at /home.2/www/accueilfi2.php:13

Jettes un oeil à la ligne 13 du fichier accueilfi2.php, et postes nous le début de ce fichier ;)

Posté

voila le début de ma page accueilfi2 :

<html>

<head><link rel="stylesheet" href="style.css" type="text/css">

<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

<meta name="GENERATOR" content="Microsoft FrontPage 4.0">

<meta name="ProgId" content="FrontPage.Editor.Document">

<title>Nouvelle page 3</title>

<link rel="STYLESHEET" type="text/css" href="stylesheet.css">

</head>

<body background="images/fond2.jpg" bgproperties="fixed">

<p>

<?php

Posté

J'aurais juste une question est-ce que le serveur ovh 60 gp accepte les sessions car on dirait justement qu'il n'accepte pas la commande session_star() et lorsque j'essai de me conecté en retrant mon login et mon mot passe il me dit que c'est impossible alors que la session s'ouvre bien sous la base de donnée

A quoi sert le répertoire sessions à la racine de mon espace perso ( moi je met tous dans www)

merci

Posté

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at /home.2/mairieve/www/gestion/admin2.php:15) in /home.2/mairieve/www/gestion/entete.inc.php on line 3

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home.2/mairieve/www/gestion/admin2.php:15) in /home.2/mairieve/www/gestion/entete.inc.php on line 3

Warning: Cannot modify header information - headers already sent by (output started at /home.2/mairieve/www/gestion/admin2.php:15) in /home.2/mairieve/www/gestion/entete.inc.php on line 29

maintenant j'ai ces erreurs ce qui fait que les pages ne sont pas protéger par un code

Posté
voila le début de ma page accueilfi2 :

<html>

<head><link rel="stylesheet" href="style.css" type="text/css">

<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

<meta name="GENERATOR" content="Microsoft FrontPage 4.0">

<meta name="ProgId" content="FrontPage.Editor.Document">

<title>Nouvelle page 3</title>

<link rel="STYLESHEET" type="text/css" href="stylesheet.css">

</head>

<body background="images/fond2.jpg" bgproperties="fixed">

<p>

<?php

<{POST_SNAPBACK}>

Pour cette page :

Tu envoies des infos au navigateur, avant d'activer les sessions, ce qui fait une erreur.

Il te faut activer d'abord les sessions, puis seulement ensuite envoyer l'entète du site.

Pour cela, tu peux remplacer ton code par celui ci :

<html>
<? session_start(); ?>
<head><link rel="stylesheet" href="style.css" type="text/css">

<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Nouvelle page 3</title>
<link rel="STYLESHEET" type="text/css" href="stylesheet.css">
</head>
<body background="images/fond2.jpg" bgproperties="fixed">
<p>

<?php

Et enlever le 'session_start()' qui doit trainer plus loin.

Posté

Le code donné par anonymus n'est pas bon ! Il faut faire le session_start() AVANT d'écrire la balise <html> ... après c'est trop tard !!!

Tant que tu auras cette erreur, c'est que tu envoies des données au navigateur. Cela fait plusieurs fois que je te le dis ! Merci de regarder ton code et trouver l'endroit où tu commences à envoyer les données... parce que là on tourne en rond ! :(

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...