session_set_cookie_params 用于设置会话 cookie 的各个参数。其基本用法如下:
session_set_cookie_params([
'lifetime' => 3600, // cookie 过期时间(秒)
'path' => '/', // cookie 的路径
'domain' => 'm66.net', // cookie 的域名
'secure' => true, // 是否仅通过 HTTPS 传输
'httponly' => true, // 防止客户端 JavaScript 访问 cookie
]);
该函数会影响 PHP 会话 cookie 的生成,这些设置通常在调用 session_start() 之前进行。然而,session_set_cookie_params 是否会影响已经存在的 PHP 会话呢?
session_set_cookie_params 设置的会话 cookie 参数,仅对 后续创建的会话 生效。当你调用 session_start() 来启动会话时,PHP 会创建一个新的会话 cookie。该 cookie 会根据你在 session_set_cookie_params 中定义的参数进行生成。
然而,如果你已经启动了会话(通过 session_start()),调用 session_set_cookie_params 并不会影响当前会话所使用的 cookie。现有会话的 cookie 已经生成,并且这些参数会在下次请求时才会被更新。因此,对于已经存在的会话,session_set_cookie_params 并不会立即生效。
假设你在以下两种情况下调用 session_set_cookie_params:
// 第一种情况:未启动会话之前设置 cookie 参数
session_set_cookie_params([
'lifetime' => 3600,
'domain' => 'm66.net'
]);
session_start();
在这种情况下,会话的 cookie 会根据你设置的 domain 和 lifetime 来生成。
而如果你已经启动了会话:
// 第二种情况:已经启动会话后再调用 session_set_cookie_params
session_start(); // 启动会话
session_set_cookie_params([
'domain' => 'm66.net',
'lifetime' => 7200
]);
在这种情况下,session_set_cookie_params 将不会对当前会话产生任何影响。只有在下次调用 session_start() 时,新的 cookie 参数才会生效。
如果你需要修改已存在的会话参数(如 cookie 的过期时间),你可以通过修改 $_SESSION 数组中的值来间接控制会话内容,但不能直接修改现有的会话 cookie。
session_start(); // 启动会话
$_SESSION['user'] = 'example'; // 设定 session 内容
// 如果需要修改会话过期时间,可以在服务器端逻辑中做出调整,
// 但无法直接改变已存在的会话 cookie。