Solución:
Para las propias cookies de sesión de PHP en Apache:
agregue esto a su configuración de Apache o .htaccess
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>
Esto también se puede configurar dentro de un script, siempre que se llame antes session_start()
.
ini_set( 'session.cookie_httponly', 1 );
- Para tus cookies, vea esta respuesta.
- Para Cookie de sesión propia de PHP (
PHPSESSID
, de forma predeterminada), consulte la respuesta de @ richie
los setcookie()
y setrawcookie()
funciones, introdujo el httponly
, de vuelta en la edad oscura de PHP 5.2.0, lo que hace que esto sea agradable y fácil. Simplemente establezca el séptimo parámetro en verdadero, según la sintaxis
Sintaxis de la función simplificada para mayor brevedad
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
En PHP <8, especifique NULL
para los parámetros que desea mantener como predeterminados.
En PHP> = 8, puede beneficiarse del uso de parámetros con nombre. Consulte esta pregunta sobre parámetros con nombre.
setcookie( $name, $value, httponly:true )
También es posible utilizar los modelos más antiguos y de nivel inferior. header()
función:
header( "Set-Cookie: name=value; httpOnly" );
También puede considerar si debe establecer el secure
parámetro.
Tenga en cuenta que las cookies de sesión de PHP no utilizan httponly
por defecto.
Para hacer eso:
$sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, "https://foroayuda.es/", null, null, true);
}
Un par de puntos a destacar aquí:
- Tienes que llamar
session_name()
antes desession_start()
- Esto también establece la ruta predeterminada a “https://foroayuda.es/”, que es necesaria para Opera pero que las cookies de sesión PHP tampoco lo hacen por defecto.