Bonjour,

Voila quand je suis sur wamp j'ai occune erreur et des que je passe sur un hébergeur j'obtient cette erreur suivante

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/frenchg1/public_html/shop/register.php:1) in /home/frenchg1/public_html/shop/lib/Session.php on line 18

Warning: Cannot modify header information - headers already sent by (output started at /home/frenchg1/public_html/shop/register.php:1) in /home/frenchg1/public_html/shop/lib/App.php on line 21

Mon Code :

<?php
require 'lib/Autoloader.php';
\lib\Autoloader::register();

require 'lib/Authentification.php';
$db = \lib\App::getDatabase();
$captcha = new \lib\Recaptcha('6LeZuxoTAAAAAE7MiLHyFRczZtutAkyIOWw2Q6vj', '6LeZuxoTAAAAAC6Uaxao1D-ynzjhBZPFqwsUEkdi');

if(isset($_POST['add']))
{
    $errors = array();
    $ip = $_SERVER['REMOTE_ADDR'];

    $validator = new \lib\Validator($_POST);
    $validator->isAlpha('pseudo', "Votre pseudo doit étres alphanumerique");
    if($validator->isValid())
    {
        $validator->isUniq('pseudo', $db, 'membres', "Le pseudo demandé est déjas pris");
    }
    $validator->isEmail('email', "Votre email n'est pas valide");
    if($validator->isValid())
    {
        $validator->isUniq('email', $db, 'membres', "L'email demandé est déjas utilisé pour un autre compte");
    }
    $validator->isConfirmed('password', "Les mot de passe ne corresponde pas");

    if($validator->isValid())
    {
        if($captcha->isValid($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']) === false)
        {
            \lib\App::getAuth()->register($_POST['pseudo'], $_POST['password'], $_POST['email'], $ip, $db);
            \lib\Session::getInstance()->setFlash('success', "Compte créer. Vous devez confirmé votre compte !");
            \lib\App::redirect("login.php");
        }
        else
        {
            \lib\Session::getInstance()->setFlash("danger", "Le captcha est invalide");
        }
    }
    else
    {
        $errors = $validator->getErrors();
    }
}
?>

4 réponses


Bonsoir.
Montres nous ta classe Session, puisqu'il semblerait que ce soit elle qui gère les sessions.

Voila ```
<?php

namespace lib;

class Session
{
static $instance;

static function getInstance(){
    if(!self::$instance){
        self::$instance = new Session();
    }
    return self::$instance;
}

public function __construct(){
    session_start();
}

public function setFlash($key, $message){
    $_SESSION['flash'][$key] = $message;
}

public function hasFlashes(){
    return isset($_SESSION['flash']);
}

public function getFlashes(){
    $flash = $_SESSION['flash'];
    unset($_SESSION['flash']);
    return $flash;
}

public function write($key, $value){
    $_SESSION[$key] = $value;
}

public function read($key){
    return isset($_SESSION[$key]) ? $_SESSION[$key] : null;
}

public function delete($key){
    unset($_SESSION[$key]);
}

}

Bonjour,

Ton problème vient peut être du fait que ta session est déjà démarré, soir dans ton constructeur tu vérifie si ta session est déjà démarré avec un session_status == PHP_SESSION_ACTIVE tu n'a pas besoin de refaire un session_start().

La session demare que dans le constructeur