创建会话时检查 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 在它崩溃时无论如何都会做的...
我目前正在创建一个会话,我在其中检查 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 在它崩溃时无论如何都会做的...