Nginx代理传递PHPSESSID大小写问题:PHP端是否易修复?
PHP应用端修复PHPSESSID大小写问题的可行性
先给结论:在PHP应用端修这个问题超简单,几行代码就能搞定,完全可以向供应商提修复请求。
具体有两种常见的简单修复方式:
方式一:直接读取兼容大小写的请求头
PHP会把所有请求头转换为HTTP_前缀+全大写的键名存在$_SERVER数组里——不管Nginx传的是Phpsessid还是PHPSESSID,最终在PHP里都能通过$_SERVER['HTTP_PHPSSESSID']拿到值。开发者只需要在启动会话前加几行代码:
// 检查是否有会话ID请求头,有的话手动设置 if (!empty($_SERVER['HTTP_PHPSSESSID'])) { session_id($_SERVER['HTTP_PHPSSESSID']); } // 正常启动会话 session_start();
方式二:兼容多种头名写法(更稳妥)
如果担心特殊情况,也可以遍历$_SERVER变量,匹配所有大小写形式的会话ID请求头:
$sessionId = null; // 遍历找所有和PHPSESSID相关的请求头 foreach ($_SERVER as $key => $val) { if (strtoupper($key) === 'HTTP_PHPSSESSID') { $sessionId = $val; break; } } if ($sessionId) { session_id($sessionId); } session_start();
修复成本说明
这两种方式都不需要改动应用的核心业务逻辑,只是在会话启动的环节加几行兼容代码,对于任何有基础的PHP开发者来说都是几分钟就能搞定的事。而且你的场景是PHP 5.6.40,这些写法在这个版本里完全兼容,没有兼容性问题。
所以你完全可以放心向供应商提出修复请求,这个需求合理且实现成本极低。
内容的提问来源于stack exchange,提问作者viktorkho
相关产品推荐
相关产品推荐

