Bonjour,

Je suis entrain de faire le tutoriel espace utilisateur en php et je souhaite que le cookie de la case à cocher soit en secure et httponly alors je fais:

setcookie('remember', $user->id . '==' . $remember_token . sha1($user->id . 'tba'), time() + 60 * 60 * 24 * 7, null, null, true, true);

Mais ça ne marche pas sachant que l'espace que je loue chez ovh est en https et que si je fais comme ça:

setcookie('remember', $user->id . '==' . $remember_token . sha1($user->id . 'tba'), time() + 60 * 60 * 24 * 7);

Le cookie fonctionne bien mais il n'est pas en secure ni en httponly. Quelqu'un a une idée ?

Je vous remecie de votre aide.

6 réponses


La raison c'est que les paramètres path et domain sont des chaînes de charactères donc au lieu de null il faut que tu mettes ""

barpoi78
Auteur

merci alors je fais :

setcookie('remember', $user->id . '==' . $remember_token . sha1($user->id . 'tba'), time() + 60 * 60 * 24 * 7, '/', 'www.lcab.eu', true, true);

puisque mon domaine est sécurisé, mais pas grand chose de plus.

Et donc? Quel est le problème ?

barpoi78
Auteur

Je m'aperçois que mes cookies fonctionnent bien en local mais sécurisés ou non, ils ne fonctionnent pas sur mon site depuis que j'ai activé le certificat SSL.

Enlève le www. de ton domaine pour voir.

Voici le code que j'utilise dans ma classe de Session :

        // Force cookie path (but do not change lifetime)
        $cookie = session_get_cookie_params();
        // Default cookie expiration and path.
        $cookiedir = '';
        if (dirname($this->request->getServer('SCRIPT_NAME', ''))!='/') {
            $cookiedir = dirname(dirname($this->request->getServer('SCRIPT_NAME', ''))).'/';
        }
        // To reduce risk of session ID injection
        ini_set('session.referer_check', $this->request->getSchemeAndHttpHost());
        // Make sure HTTP contents are not cached for authenticated session. Allow caching only when contents are not private.
        ini_set('session.cache_limiter', 'nocache');
        if (PHP_VERSION >= '7.1.0') {
            // Longer session ID results in stronger session ID
            ini_set('session.sid_length', 48);
            // The more bits in a session ID char, session module generates stronger session ID for the same session ID length.
            ini_set('session.sid_bits_per_character', 6);
        }
        if (PHP_VERSION < '7.1.0') {
            // Stronger hash function will generates stronger session ID. 
            ini_set('session.hash_function', 'sha256');
        }

        $ssl = true;
        if ($this->request->getServer('HTTPS','') !== 'on') {
            $ssl = false;
        } else {
            // Allows access to session ID cookie only when protocol is HTTPS.
            ini_set('session.cookie_secure', 1);
        }
        session_set_cookie_params($cookie['lifetime'], $cookiedir, $this->request->getServer('HTTP_HOST'), $ssl);

        # On Debian based system, a cronjob script exists to clean session because the Debian package maintainers of PHP
        # believed that the solution for cleaning up session data in PHP is insecure.
        # To avoid "ps_files_cleanup_dir: opendir(/var/lib/php/sessions) failed: Permission denied (13)" warning, the setting
        # session.gc_probability should be set to 0 instead of normally 1 in others systems.
        if (is_file('/usr/lib/php/sessionclean')) {
            ini_set('session.gc_probability', 0);
        }

        // Browsers not to store cookie to permanent storage.
        ini_set('session.cookie_lifetime', 0);
        // Use cookies to store session.
        ini_set('session.use_cookies', 1);
        // This prevents session module to use uninitialized session ID.
        ini_set('session.use_strict_mode', 1);
        // Disallow access to session cookie by JavaScript.
        ini_set('session.cookie_httponly', 1);
        // Force cookies for session  (phpsessionID forbidden in URL)
        ini_set('session.use_only_cookies', 1);
        if (phpversion() >= '7.3') {
            ini_set('session.cookie_samesite', 'Strict');
        }
        // Prevent php to use sessionID in URL if cookies are disabled.
        ini_set('session.use_trans_sid', 0);

A personnaliser avec ton code.