cookie secure et httponly

Par barpoi78, il y a 7 ans


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

Gorgio, il y a 7 ans

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, il y a 7 ans

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.

Gorgio, il y a 7 ans

Et donc? Quel est le problème ?

barpoi78, il y a 7 ans

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.

Gorgio, il y a 7 ans

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

jerrywham, il y a 7 ans

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.