所以我做了一些挖掘,并没有找到一个满意的答案,我的问题关于PHPsetcookie()
参数secure
。文档是这样说的:
表示cookie只能通过安全的HTTPS连接从客户端传输。当设置为true时,只有在存在安全连接时才会设置cookie。在服务器端,程序员只能在安全连接(例如关于
$_SERVER["HTTPS"]
)上发送这种cookie。
我不明白的是最后一部分。"在服务器端[…]"是什么意思?
我做了一些测试,在我的本地机器上,当secure
设置为true
时,即使没有https, cookie也会设置。在我的网络服务器上,它们不是。那么,即使没有https,浏览器也会认为localhost是安全的吗?
我都将secure
设置为true
并检查$_SERVER["HTTPS"]
以确保安全,但我想知道secure
究竟做了什么,或者它没有做什么。
最诚挚的祝福和感谢!
setcookie()
的secure
参数将指示客户端/浏览器仅在HTTPS
请求时发送cookie。
但是,即使您不使用HTTPS
, cookie也将在客户端上设置。这就是你可以使用$_SERVER["HTTPS"]
的地方,检查你是否真的应该发送cookie和你的服务器的响应。
但是在客户端只使用HTTP
的所有请求中,cookie信息将会丢失。
在php代码中使用服务器设置cookie,如:
的例子:
<?php
$COOKIESET = [
'expires' => '0'
,'path' => /
,'domain' => 'YOURDOMAIN OR YOURIP'
,'secure' => 'true'
,'httponly' => 'true'
,'samesite' => 'Strict'
];
setcookie("NAME", "VALUE", $COOKIESET);
?>
SECURE在cookie中的使用:
这意味着浏览器只会在当前连接被加密(SSL/TLS)时发送cookie。只能在加密连接下使用
$ _SERVER("HTTPS"请求有时在某些web服务器上没有结果,所以尝试从这个帖子中使用:
如何使用HTTPS找出如果你没有$ _SERVER("HTTPS")
function isSecure() {
return
(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
|| $_SERVER['SERVER_PORT'] == 443;
}
或:
$isSecure = false;
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
$isSecure = true;
}
elseif (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' || !empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') {
$isSecure = true;
}
$REQUEST_PROTOCOL = $isSecure ? 'https' : 'http';
也检查一下:
会话。
来自:
可以从不安全的HTTP连接设置安全cookie吗?如果是这样,为什么是允许的?
安全cookie可以在不安全的通道(例如HTTP)上设置,详见RFC 6265的4.1.2.5节。它明确地提到安全标志只提供机密性而不提供完整性,因为安全标记的cookie仍然可以从不安全的通道设置,覆盖任何先前设置的值(通过安全通道或其他方式):
HttpOnly在cookie中的使用:
HttpOnly Cookie是添加到浏览器Cookie中的标签,用于阻止客户端脚本访问数据。它提供了一个门,防止专门的cookie被服务器以外的任何东西访问。