PHP 8.0 PHP.ini syntax for session_set_cookie_params



我正在配置php.ini文件,试图理解php.ini文件的正确语法,并设置session-set-cookie.params。首先,不清楚设置是否需要引号?有人能提供一个正确语法的例子吗?我的目标是,我希望在我的网站上的所有子域中都有可用的会话变量。它还说,";。。。在调用sessionstart((之前,您需要为每个请求调用sessionset_cookie_params(("所以基本上,我需要

<?php 
session_set_cookie_params()
session_start()
// PHP CODE HERE
?> 

对吧?以下是我目前所了解的网页和php.ini代码。

https://www.php.net/manual/en/function.session-set-cookie-params.php.

session_set_cookie_params(
int $lifetime_or_options,
string|null $path = null,
string|null $domain = null,
bool|null $secure = null,
bool|null $httponly = null
): bool

到目前为止,这是我的配置文件。

session_set_cookie_params(
600 $lifetime_or_options,
$path = .mywebsite.com,
$domain = /,
$secure = null,
$httponly = null
): bool

在我看来,您并没有试图在这里修改php.ini(php.ini是在php之前加载的静态服务器范围配置文件(,而是通过php代码在运行时设置php的ini值。为此,我认为您只是误读了文档中的函数定义,以及参数的表达方式。

在PHP的后续版本中(您使用的是8,所以这很重要(,最好将参数作为数组传递。这在文档中PHP 7.3.0可用的替代签名下列出。当文档提到值$lifetime_or_options时,它们意味着该参数可以是整数生存期值(600(,也可以是所有选项的数组,如下所示:

使用[]:将它们捆绑在一个阵列中

session_set_cookie_params([
'lifetime' => 600,
'path' => '/',
'domain' => '.yoursite.example.com',
'secure' => true,
'httponly' => true
]);

请注意,我已将securehttponly设置为true。httponly将阻止javascript访问会话cookie,这在大多数情况下都是合适的。但是,如果您需要您的会话在没有SSL的情况下工作,请将secure设置为false-当设置为true时,会话cookie将仅通过https传输。

我还切换了您的pathdomain值。

另一种更古老的表达方式是直接将单个值作为函数参数传递——我认为这是您在文档中误解的部分。

session_set_cookie_params(600, '/', '.yoursite.example.com', true, true);

还要注意,600对于会话cookie来说是非常短的寿命,只有十分钟。你可能需要它才能活得更长。

最新更新