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

时间:2016-10-26 15:06:39

标签: php session session-cookies ini

我正在创建一个会话,我在其中检查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);

1 个答案:

答案 0 :(得分:1)

在我看来,没有必要。

不,客户端无法处理ini文件。这是肯定的。

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

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

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

现在提出你的问题:不,这不会导致任何事情崩溃。实际上,对于99.99%的用户而言,它不会有所作为!该设置只会停用从Cookie到网址的后备 绝对最糟糕的情况是,启用非cookie的用户不会获得会话。

有点偏离:以这种方式检查失败对我来说没有任何意义:如果你试图发现问题,你应该告诉用户他们现在可以做什么,或者(甚至更好)尝试在另一个人处理它办法。抛出500错误并退出并没有太大的区别,因为这就是PHP在崩溃时所做的事情......