cookie secure et httponly

Default
,

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éponse

21827
,

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 ""

Default
,

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.

21827
,

Et donc? Quel est le problème ?

Default
,

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.

21827
,

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

43736
,

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.