创建会话时检查 session.use_only_cookies 的目的?

Purpose of checking session.use_only_cookies when creating a session?

我目前正在创建一个会话,我在其中检查 ini 文件以查看是否设置了 use_only_cookies。这真的有必要吗?我的意思是,客户端有没有办法弄乱 ini 文件?我问的原因是因为如果用户被重定向到同一个域,这个检查只会一遍又一遍地循环。

当会话是全局的时,如何防止这种情况发生?或者在创建会话时是否有必要添加?

$session_life   = 3600;
$session_name   = 'SecUser';
$http_only      = true;
if(ini_set('session.use_only_cookies',1) === false){
   header('500 Internal Server Error', true, 500);
   exit();
}
$cookieParams = session_get_cookie_params();
session_set_cookie_params($session_life, $cookieParams['path'], $cookieParams['domain'], $secure, $http_only);
session_name($session_name);
session_start();
session_regenerate_id(false);

我认为没有必要。

不,客户端不能乱用 ini 文件。那是肯定的。

如果您只想要一个带有会话 ID 的标准会话,您可以使用简单快捷的方法:只需使用 session_start() - 就是这样!没有 ini_set(),没有 session_get_cookie_params(),没有 session_set_cookie_params(),没有 session_name(),没有 session_regenerate_id()。所有这些功能仅在特殊情况下才需要。

评论后编辑:
在某些环境(例如共享主机)中,您无权访问 php.ini。这就是为什么 PHP 允许您 and/or 从应用程序中设置其中一些设置的原因。此外,可能会有一些(非常奇特的)用例,其中有人想要动态更改此 ini 设置...

第二次评论后编辑
看这里:http://php.net/manual/session.configuration.php#ini.session.use-only-cookies
他们明确建议将此设置为 true。此设置的目的是:在 (a) 发明 and/or (b) 流行的 cookie 之前,PHP 为不能(或拒绝)接受 cookie 的用户提供了后备机制。在这种情况下,会话 ID 以某种方式附加到每个 (!) URL。今天很少有人使用它,因为今天几乎每个人都接受 cookie(至少是会话 cookie),因为每个网站都使用它们 ;-)

现在回答您的问题:不,这不会导致任何崩溃。实际上,对于 99.99% 的用户来说,这不会有什么不同!该设置只是停用 fallback 从 cookie 到 URL.
绝对最坏的情况是未启用 cookie 的用户不会获得会话。

有些偏离主题:无论如何,以这种方式检查故障对我来说毫无意义:如果你试图发现问题,你应该通知用户他们现在可以做什么或者(甚至更好)尝试处理它用另一种方式。只是抛出一个 500 错误并退出并没有太大的区别,因为这是 PHP 在它崩溃时无论如何都会做的...