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資料,如果網站有資安要求的話非特殊原因也會被要求設定為這樣,否則會被視為風險因素。

Tags : php