php cookies設定
簡單記錄一下php的cookies設定,以及各參數的用途。
php7和以前的cookies設定方式有些許差異,下面的範例使用PHP_VERSION_ID來進行版本判斷,如果程式有需要對應不同版本的PHP的話可以考慮使用此方式判斷。
//預設值設定
if (PHP_VERSION_ID >= 70300) { //7版
session_set_cookie_params([
'path' => '/',
'domain' => '',
'secure' => TRUE,
'httponly' => TRUE,
'samesite' => 'None',
]);
}else{
session_set_cookie_params(
0,
'/; samesite=None',
'',
"1",
"1"
);
}
先設定好預設值的話,之後使用時沒指定的參數就會使用預設值處理。
//設定cookies
if (PHP_VERSION_ID >= 70300) { //php7
//setcookie(string $name, string $value = "", array $options = []): bool
setcookie($name, $value, [
'expires' => time() + 86400,
'path' => '/',
'domain' => 'domain.com',
'secure' => true,
'httponly' => true,
'samesite' => 'None',
]);
}else{
/*
setcookie(
string $name,
string $value = "",
int $expires_or_options = 0,
string $path = "",
string $domain = "",
bool $secure = false,
bool $httponly = false
)
*/
setcookie($key, $msg, time()+60,"/");
}
php7以後的版本使用陣列來設定,如果不設定的參數留空白就好,以前的版本則是對應的參數位置進行設定,如果需要設定後方的參數則必須一併設定較前面的參數。
對應的參數功能如下
- expires : 保留時間
- path : 路徑,一般設為/就好
- domain : 網域,一般設為"“就好
- secure : true/false,開啟的話會鎖定加密連線(HTTPS)才能使用
- httponly : true/false,開啟的話只有伺服器能讀取,無法使用JS等方式取得
- samesite : Strict/Lax/None,是否開放跨網域存取,詳細的差異還蠻複雜的,有興趣的話可以去查詢不同設定的運作方式,一般來說沒有需求要給其他網站使用的情況都設定為None
其中secure、httponly、samesite三個參數,如果環境許可最好設定為true、true、None來保護cookies資料,如果網站有資安要求的話非特殊原因也會被要求設定為這樣,否則會被視為風險因素。