6
votes

PHP définissant un cookie de session avec le même site

J'ai actuellement un script PHP qui définit le cookie sametime comme suit:

    session_set_cookie_params($cookie_timeout, $cookieParams["path"], $cookie_domain, $session_secure, $cookie_httponly, $cookie_samesite);

Je veux ajouter samesite = "Lax" à la déclaration ci-dessus en ajoutant un paramètre supplémentaire où ($ cookie_samesite = "Lax")

    session_set_cookie_params($cookie_timeout, $cookieParams["path"], $cookie_domain, $session_secure, $cookie_httponly);

La nouvelle sortie de l'instruction ressemblerait à

1800, /, ".vasports.com.au", 1, 1, "Lax"

Est-ce le format correct pour le paramètre du même site?

REMARQUE: je n'ai pas encore installé PHP7.3. Par conséquent, je ne peux pas tester cela correctement. Et j'ai fait référence à PHP doco pour "session_set_cookie_params". J'ai aussi vérifié

Setcookie PHP "SameSite = Strict"?


0 commentaires

3 Réponses :


1
votes

Après quelques recherches supplémentaires ...

  1. Obtenez d'abord les paramètres actuels.
  2. Modifiez ensuite les paramètres selon vos besoins, dans ce cas [samesite] = "Lax".
  3. Définissez le cookie.
    set-cookie: ssid=b930bc608a911781f459a4f46b2c513d; expires=Wed, 16-Oct-2019 10:48:49 GMT; Max-Age=1800; path=/; secure; HttpOnly; SameSite=Lax

Vérifiez votre en-tête 'set-cookie:' et vous devriez maintenant voir le texte 'SameSite = Lax' à la fin comme ceci.

    $cookieParams = session_get_cookie_params();
    $cookieParams[samesite] = "Lax";
    session_set_cookie_params($cookieParams);


0 commentaires

16
votes

Depuis PHP 7.3, vous pouvez lancer un tableau d'options dans set_cookie_params qui prend en charge SameSite.

session_set_cookie_params([
    'lifetime' => $cookie_timeout,
    'path' => '/;SameSite=none', // <-- this way!
    'domain' => $cookie_domain,
    'secure' => $session_secure,
    'httponly' => $cookie_httponly,
    'samesite' => 'Lax'
]);

Sur PHP <7.3, vous pouvez ajouter le paramètre SameSite en l'ajoutant dans le paramètre "path".

session_set_cookie_params([
    'lifetime' => $cookie_timeout,
    'path' => '/',
    'domain' => $cookie_domain,
    'secure' => $session_secure,
    'httponly' => $cookie_httponly,
    'samesite' => 'Lax'
]);


6 commentaires

il a déclaré qu'il n'avait pas la version 7.3, il cherche donc une réponse dans une autre version précédente


@nbk Non, il a dit qu'il était incapable de le tester car 7.3 n'était pas encore installé. En dessous de 7.3, ce n'est pas possible via les paramètres de cookie, vous devez alors changer l'en-tête. De plus, c'est la page sur laquelle j'ai atterri après une recherche, donc cela peut aussi être pour d'autres et obtenir d'abord les paramètres de cookie pour les redéfinir, c'est une surcharge supplémentaire. Je pense que c'est la meilleure méthode pour 7.3+ atm.


C'est la réponse dont j'avais besoin. Mais j'ai aussi finalement mis à niveau vers PHP7.3 et l'ai testé pour confirmer qu'il fonctionne correctement. - Merci pour la réponse.


Chers collègues, qu'en est-il de PHP <7.3?


En php <7.3 @session_set_cookie_params (0, '/; SameSite = Strict');


Je suis sur php 5.6 - pour avoir des cookies définis dans un iFrame, j'utilise ce code pour que ma page fonctionne à nouveau sur Chrome 84: session_set_cookie_params (3600 * 24, '/; SameSite = None', $ _SERVER ['HTTP_HOST'], true ); Définir secure sur "true" est important. (mieux fermer le navigateur et vider le cache pour le tester)



0
votes

Adapté de la réponse SilverShadow, mais corrigeant la syntaxe pour php <7.3, puisque session_set_cookie_params() ne peut pas prendre un tableau comme paramètre unique jusqu'à ce que preciselly 7.3, au lieu de cela, chaque paramètre doit être défini. et détection automatique de la version de php pour l'option correcte afin que vous puissiez l'utiliser même si vous mettez à jour plus tard vers la version 7.3:

// set as your own needs:
$maxlifetime = 0;
$path = '/';
$domain = '';
$secure = false;
$httponly = false;
$samesite = 'lax'; // here is what we need

if(PHP_VERSION_ID < 70300) {
    session_set_cookie_params($maxlifetime, $path.'; samesite='.$samesite, $domain, $secure, $httponly);
} else {
    // note I use `array()` instead of `[]` to allow support of php <5.4
    session_set_cookie_params(array(
        'lifetime' => $maxlifetime,
        'path' => $path,
        'domain' => $domain,
        'secure' => $secure,
        'httponly' => $httponly,
        'samesite' => $samesite
    ));
}


0 commentaires