我发现了一些奇怪的行为 - 我很感兴趣 - 任何人都可以对此有所了解......?
概观
今天早上花了一些时间找出导致$_SESSION
数组清空的错误原因.最终得到它的底部,并发现在为其中一个$_SESSION
变量定义一个索引时,一个&
被用于连接而不是一个.
.它只在两个特定字符串被&
编辑时断开,其他字符串导致无意义键但$_SESSION
不为空.
这在PHP5.5.9-1ubuntu4.20上运行,在PHP5.6.15本地运行.
亲自尝试一下!
使用下面的示例代码,
$_SESSION
现在是空的!示例代码
设置session.php文件
session_start();
$_SESSION = [
'colour' => 'blue',
'shape' => 'round',
'size' => 'medium'
];
Run Code Online (Sandbox Code Playgroud)
入住session.php文件
session_start();
echo '<pre>';
print_r($_SESSION);
Run Code Online (Sandbox Code Playgroud)
突破session.php文件
session_start();
$killer_string = 'Admin_CH_1_' & '101_';
$_SESSION[$killer_string] = null;
echo '<pre>';
print_r($_SESSION);
Run Code Online (Sandbox Code Playgroud)
我猜
我猜测按位运算的结果导致字符串,在这种情况下$killer_string
,导致PHP在尝试将$_SESSION
数组存储在服务器上时生气.奇怪的$killer_string
是,当用作子阵列的键时,它不再是杀手$_SESSION …
举例来说,假设我有以下内容,其中为每个拥有一顶帽子的人建立了关系。
$people = People::join('hat')->get();
Run Code Online (Sandbox Code Playgroud)
我如何过滤我的结果,只给我那些帽子是红色的人?
我试过了,
$people = People::join('hat')
->where('hat.colour', 'red')
->get();
Run Code Online (Sandbox Code Playgroud)
...但到目前为止还没有运气。
干杯