PHP $_COOKIE 未完全填充

标签 php apache laravel cookies

我花了一些时间试图追踪 a particular Laravel bug 的根本原因,因为最初的 GitHub 问题在没有解决的情况下被关闭。

经过一段时间的试验,我发现 session 正在重新生成,因为 laravel_session cookie 被设置为 null 。尽可能地追溯这一点,我发现在 index.php 中——在 Laravel 之前 加载——$_COOKIE 的值已损坏......有时

大约 90% 的时间,当我调用我的应用程序时,我的 cookie 看起来像这样:

array:7 [
  "__unam" => "bc7c68-14f8d12a5ef-43097c02-213"
  "__utma" => "152883115.857409601.1438038184.1440538193.1440976773.14"
  "__utmc" => "152883115"
  "__utmz" => "152883115.1435960225.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"
  "PHPSESSID" => "k8qvmt8ccbhcqepbn7mib8kra6"
  "XSRF-TOKEN" => "eyJpdiI6IlJGd2M1WHlRcnhpeGtobFZpVlZaWmc9PSIsInZhbHVlIjoiMXhFSnlHeTZKbkc5NWxYcFwvNkNUTkNXeVpROWIweGJkczhIXC9LVStNMVlvSjFoRmttTXlLeTVOS01JM0wrN2FCdjVvQzM2RHNwRjJQcGlTNWZyelM2QT09IiwibWFjIjoiZDdjMzk1Zjg0YWUzYjhlNzUyYmQ4NzAwNTFhZWIwNDM1MDQyYmMwZjZkODllMTVlMGMxNTVjZjBmNTlmMTlkNiJ9"
  "laravel_session" => "eyJpdiI6InV4YmFFTzJxTTdrVGlPdjVQZkszS1E9PSIsInZhbHVlIjoieGdsYzJTYTlqY3k4MzFIR2l6b2ZSaFwvK1RmdGg1UUhYR2dkdVpmNVVvcHoyMm5yRUpMUWRGRjVZd3ZUXC81OXl1QnpBRnR3a05kNXp1MEFoV2pLTmpIdz09IiwibWFjIjoiOThjMTU1MTE0ZTRjM2E2MGEzNGQ0MTcwODNhZmNlODMyZjM0MGViMjdmZjliMWZhNjE2M2Q0YzFlNWQxZDZiYyJ9"
]

但在 10% 的情况下,它看起来像这样:
array:7 [
  "__unam" => "bc7c68-14f8d12a5ef-43097c02-213"
  "__utma" => "152883115.857409601.1438038184.1440538193.1440976773.14"
  "__utmc" => "152883115"
  "__utmz" => "152883115.1435960225.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"
  "PHPSESSID" => "k8qvmt8ccbhcqepbn7mib8kra6"
  "XSRF-TOKEN" => "eyJpdiI6IlJGd2M1WHlRcnhpeGtobFZpVlZaWmc9PSIsInZhbHVlIjoiMXhFSnlHeTZKbkc5NWxYcFwvNkNUTkNXeVpROWIweGJkczhIXC9LVStNMVlvSjFoRmttTXlLeTVOS01JM0wrN2FCdjVvQzM2RHNwRjJQcGlTNWZyelM2QT09IiwibWFjIjoiZDdjMzk1Zjg0YWUzYjhlNzUyYmQ4NzAwNTFhZWIwNDM1MDQyYmMwZjZkODllMTVlMGMxNTVjZjBmNTlmMTlkNiJ9"
  "laravel_session" => "eyJpdiI6InV4YmFFTzJxTTdrVGlPdjVQZkszS1E9PSIsInZhbHVlIjoieGdsYzJTYTlqY3k4MzFIR2l6b2ZSaFwvK1RmdGg1UUhYR2dkdVpmNVVvcHoyMm5yRUpMUWRGRjVZd3Z"
]

使用网络代理 (Charles) 监控网络流量,问题是 而不是 - 正在发送完整的 cookie 字符串,但服务器只看到部分消息(laravel_session cookie 被切断)

每次出现问题时,它都会在 确切的 相同位置被切断:cookie 字符串开始后的 678 个字节(原始 HTTP 请求文本中的 1435 个字节)。奇怪的是,请求正文的传输没有造成任何伤害,这是原始 HTTP 请求中的 cookie 字符串 之后的 ,所以这不是 TCP 连接失败的问题。
PATCH /api/employees/1 HTTP/1.1
Host: www.mywebsite.com
Content-Length: 23
Accept: application/json, text/plain, */*
Origin: http://www.mywebsite.com
X-XSRF-TOKEN: eyJpdiI6IlJGd2M1WHlRcnhpeGtobFZpVlZaWmc9PSIsInZhbHVlIjoiMXhFSnlHeTZKbkc5NWxYcFwvNkNUTkNXeVpROWIweGJkczhIXC9LVStNMVlvSjFoRmttTXlLeTVOS01JM0wrN2FCdjVvQzM2RHNwRjJQcGlTNWZyelM2QT09IiwibWFjIjoiZDdjMzk1Zjg0YWUzYjhlNzUyYmQ4NzAwNTFhZWIwNDM1MDQyYmMwZjZkODllMTVlMGMxNTVjZjBmNTlmMTlkNiJ9
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36
Content-Type: application/json;charset=UTF-8
Referer: http://www.mywebsite.com/admin/employees?location=1
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: __unam=bc7c68-14f8d12a5ef-43097c02-213; __utma=152883115.857409601.1438038184.1440538193.1440976773.14; __utmc=152883115; __utmz=152883115.1435960225.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); PHPSESSID=k8qvmt8ccbhcqepbn7mib8kra6; XSRF-TOKEN=eyJpdiI6IlJGd2M1WHlRcnhpeGtobFZpVlZaWmc9PSIsInZhbHVlIjoiMXhFSnlHeTZKbkc5NWxYcFwvNkNUTkNXeVpROWIweGJkczhIXC9LVStNMVlvSjFoRmttTXlLeTVOS01JM0wrN2FCdjVvQzM2RHNwRjJQcGlTNWZyelM2QT09IiwibWFjIjoiZDdjMzk1Zjg0YWUzYjhlNzUyYmQ4NzAwNTFhZWIwNDM1MDQyYmMwZjZkODllMTVlMGMxNTVjZjBmNTlmMTlkNiJ9; laravel_session=eyJpdiI6InV4YmFFTzJxTTdrVGlPdjVQZkszS1E9PSIsInZhbHVlIjoieGdsYzJTYTlqY3k4MzFIR2l6b2ZSaFwvK1RmdGg1UUhYR2dkdVpmNVVvcHoyMm5yRUpMUWRGRjVZd3ZUXC81OXl1QnpBRnR3a05kNXp1MEFoV2pLTmpIdz09IiwibWFjIjoiOThjMTU1MTE0ZTRjM2E2MGEzNGQ0MTcwODNhZmNlODMyZjM0MGViMjdmZjliMWZhNjE2M2Q0YzFlNWQxZDZiYyJ9

{"id":"1","show":false}

我正在使用 PHP 的内置开发服务器 ( php -S 0.0.0.0:80 )。我尝试使用 Apache 来查看它是否解决了问题,虽然 Apache 似乎总是正确地遇到 cookie 字符串,但我遇到了另一个错误,即 PHP 在点击 file_put_contents 调用时完全崩溃和烧毁。我有以下代码:
try {
    echo "Writing... (LOCK_EX: " . LOCK_EX . ")<br />\n";
    file_put_contents($path, $contents, $lock ? LOCK_EX : 0);
    echo "Done.";
} catch( Exception $e ) {
    echo "WHAT";
}
echo "Failed?";

哪个只返回 Writing... (LOCK_EX: 2)<br />\n
没有“完成。”、“什么”或“失败?”显示。

查看 ps all 以查看服务器是否挂起,我什至看不到 Apache 进程。但是我知道 Apache 正在运行,因为如果我停止 Apache ( sudo apachectl stop ),我将停止从服务器获取 任何 响应
4     0   807     1  20   0  15820   912 n_tty_ Ss+  tty4       0:00 /sbin/getty -8 38400 tty4
4     0   810     1  20   0  15820   916 n_tty_ Ss+  tty5       0:00 /sbin/getty -8 38400 tty5
4     0   815     1  20   0  15820   916 n_tty_ Ss+  tty2       0:00 /sbin/getty -8 38400 tty2
4     0   816     1  20   0  15820   920 n_tty_ Ss+  tty3       0:00 /sbin/getty -8 38400 tty3
4     0   819     1  20   0  15820   916 n_tty_ Ss+  tty6       0:00 /sbin/getty -8 38400 tty6
4     0  1029     1  20   0  15820   916 n_tty_ Ss+  tty1       0:00 /sbin/getty -8 38400 tty1
0     0  1057  9241  20   0  10016   880 -      R+   pts/2      0:00 ps all
0     0  5278  9239  20   0  12404  1212 wait   Ss   pts/8      0:00 bash -c export ISOUTPUTPANE=0;bash -l
0     0  5279  5278  20   0  22708  3660 n_tty_ S+   pts/8      0:00 bash -l
0     0  9240  9239  20   0  12404  1144 wait   Ss   pts/2      0:00 bash -c export ISOUTPUTPANE=0;bash -l
0     0  9241  9240  20   0  22776  3868 wait   S    pts/2      0:00 bash -l
0     0  9287  9239  20   0  12404  1148 wait   Ss   pts/4      0:00 bash -c export ISOUTPUTPANE=0;bash -l
0     0  9288  9287  20   0  22792  4040 n_tty_ S+   pts/4      0:02 bash -l
0     0 10740  9239  20   0  12404  1152 wait   Ss   pts/5      0:00 bash -c export ISOUTPUTPANE=0;bash -l
0     0 10741 10740  20   0  22756  3836 n_tty_ S+   pts/5      0:00 bash -l
0     0 17522 17476  20   0   1924   512 poll_s Ss+  pts/1      0:00 /root/.c9/bin/tmux -u2 -L cloud91.9 attach -t user@server_668 -d
0     0 18258 17476  20   0   1924   516 poll_s Ss+  pts/3      0:00 /root/.c9/bin/tmux -u2 -L cloud91.9 attach -t user@server_14 -d
0     0 20097  9239  20   0  12404  1204 wait   Ss   pts/9      0:00 bash -c export ISOUTPUTPANE=0;bash -l
0     0 20098 20097  20   0  22708  3808 wait   S    pts/9      0:00 bash -l
0     0 20134 20098  20   0 103624  2880 n_tty_ S+   pts/9      0:00 mysql -u root -p
0     0 30986 17476  20   0   1924   516 poll_s Ss+  pts/7      0:00 /root/.c9/bin/tmux -u2 -L cloud91.9 attach -t user@server_836 -d
0     0 31599  9239  20   0  12404  1204 wait   Ss   pts/6      0:00 bash -c export ISOUTPUTPANE=0;bash -l
0     0 31603 31599  20   0  22708  3636 n_tty_ S+   pts/6      0:00 bash -l
0     0 31632  9239  20   0  12404  1152 wait   Ss   pts/10     0:00 bash -c export ISOUTPUTPANE=0;bash -l
0     0 31633 31632  20   0  22760  3828 n_tty_ S+   pts/10     0:00 bash -l
0     0 31811  9239  20   0  12404  1152 wait   Ss   pts/12     0:00 bash -c export ISOUTPUTPANE=0;bash -l
0     0 31812 31811  20   0  22708  3520 n_tty_ S+   pts/12     0:00 bash -l

我真的不确定发生了什么(为什么 Apache 失败或者为什么 PHP 内置服务器会切断我的 $_COOKIE 变量)。

最后一点,我已经检查了我尝试写入的文件的权限:
-rwxr-xr-x 1 root root 10629 Mar 12 13:14 services.json

所以不是这样。

更新

根据@Siguza 的建议,我尝试添加另一个 cookie,看看会发生什么。第一次检查时,当我在解密之前运行 dd( $request->cookies ) 时,似乎发生了一些非常奇怪的行为:

成功
ParameterBag {#40
  #parameters: array:9 [
    "PHPSESSID" => "k8qvmt8ccbhcqepbn7mib8kra6"
    "__unam" => "bc7c68-14f8d12a5ef-43097c02-217"
    "__utma" => "152883115.857409601.1438038184.1440976773.1441571912.15"
    "__utmb" => "152883115.4.9.1441572254693"
    "__utmc" => "152883115"
    "__utmz" => "152883115.1435960225.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"
    "yetAnotherCookie" => "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
    "XSRF-TOKEN" => "eyJpdiI6ImVqcW1cL09cL3oyQ0ZIcFBiQTRmZXFKUT09IiwidmFsdWUiOiJEbzV0NHcraGNmd3BMb0hibG5uNm9UTnhvNlV4bVRCVWRHOWFBM3VrOG0wZ2Z2NmF5QnpuNFh6a1dYdmhcL2pmWUtIb2lsOGdBS29xV0hvNnFOQktxR2c9PSIsIm1hYyI6IjRjMjU4ZWYxMTJkZTQ1NTU2YWQ3M2EwZjAzZDQwNDI4YzNmOTJjYTVhZTUzZTg4MzFmNTUxZDFkMTljNDBjZjkifQ=="
    "laravel_session" => "eyJpdiI6IkRkcGNLRE9KK3hkOFRNdzFXQzQreWc9PSIsInZhbHVlIjoiQm1qN2lNa2pTQTE2ZTQxUzJxbExGYnhheFhjUkQwMEpybEQ3XC9cL0pDMzA1MXdEeHF3a09qbnRKTjdPMzRKdjdBeFFNQ1hkamw1THFQanlnUURoRjJndz09IiwibWFjIjoiYTkzNjdmYjYyYTMzODM2MmY2MjQyNzZhNDQ1YjY2NzQ3OTFiZjVjODIyZmYzYmE3YjhlNGM1ZjQ2NTk1MTczNyJ9"
  ]
}

失败
ParameterBag {#40
  #parameters: array:8 [
    "PHPSESSID" => "k8qvmt8ccbhcqepbn7mib8kra6"
    "__unam" => "bc7c68-14f8d12a5ef-43097c02-217"
    "__utma" => "152883115.857409601.1438038184.1440976773.1441571912.15"
    "__utmb" => "152883115.4.9.1441572254693"
    "__utmc" => "152883115"
    "__utmz" => "152883115.1435960225.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)"
    "XSRF-TOKEN" => "eyJpdiI6ImVqcW1cL09cL3oyQ0ZIcFBiQTRmZXFKUT09IiwidmFsdWUiOiJEbzV0NHcraGNmd3BMb0hibG5uNm9UTnhvNlV4bVRCVWRHOWFBM3VrOG0wZ2Z2NmF5QnpuNFh6a1dYdmhcL2pmWUtIb2lsOGdBS29xV0hvNnFOQktxR2c9PSIsIm1hYyI6IjRjMjU4ZWYxMTJkZTQ1NTU2YWQ3M2EwZjAzZDQwNDI4YzNmOTJjYTVhZTUzZTg4MzFmNTUxZDFkMTljNDBjZjkifQ=="
    "laravel_session" => "eyJpdiI6IkRkcGNLRE9KK3hkOFRNdzFXQzQreWc9PSIsInZhbHVlIjoiQm1qN2lNa2pTQTE2ZTQxUzJxbExGYnhheFhjUkQwM"
  ]
}

奇怪的是,我添加的新 cookie (yetAnotherCookie) 完全是 消失了,而 Laravel session 仍然被截断。检查 HTTP 请求,我注意到 yetAnotherCookie 被附加在末尾,因此截断整个字符串可以合理地将其从列表中删除:
PHPSESSID=k8qvmt8ccbhcqepbn7mib8kra6; __unam=bc7c68-14f8d12a5ef-43097c02-217; __utma=152883115.857409601.1438038184.1440976773.1441571912.15; __utmb=152883115.4.9.1441572254693; __utmc=152883115; __utmz=152883115.1435960225.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); XSRF-TOKEN=eyJpdiI6ImVqcW1cL09cL3oyQ0ZIcFBiQTRmZXFKUT09IiwidmFsdWUiOiJEbzV0NHcraGNmd3BMb0hibG5uNm9UTnhvNlV4bVRCVWRHOWFBM3VrOG0wZ2Z2NmF5QnpuNFh6a1dYdmhcL2pmWUtIb2lsOGdBS29xV0hvNnFOQktxR2c9PSIsIm1hYyI6IjRjMjU4ZWYxMTJkZTQ1NTU2YWQ3M2EwZjAzZDQwNDI4YzNmOTJjYTVhZTUzZTg4MzFmNTUxZDFkMTljNDBjZjkifQ%3D%3D; laravel_session=eyJpdiI6IkRkcGNLRE9KK3hkOFRNdzFXQzQreWc9PSIsInZhbHVlIjoiQm1qN2lNa2pTQTE2ZTQxUzJxbExGYnhheFhjUkQwMEpybEQ3XC9cL0pDMzA1MXdEeHF3a09qbnRKTjdPMzRKdjdBeFFNQ1hkamw1THFQanlnUURoRjJndz09IiwibWFjIjoiYTkzNjdmYjYyYTMzODM2MmY2MjQyNzZhNDQ1YjY2NzQ3OTFiZjVjODIyZmYzYmE3YjhlNGM1ZjQ2NTk1MTczNyJ9; yetAnotherCookie=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
我清除了域的所有 cookie 并再次尝试:

成功
ParameterBag {#40
  #parameters: array:4 [
    "__unam" => "bc7c68-14f8d12a5ef-43097c02-217"
    "XSRF-TOKEN" => "eyJpdiI6ImV6aklvVVNwZHdCMThON1hQOW9rcmc9PSIsInZhbHVlIjoiWlY1aGdQamJ1Y2FQTGxTUDZTTmxPK2xLZm5xZG15enlVXC95RXhRMHNqbm9udkp5T3NnR3FBQ0dxRWEzYTdIVUFveHA1TTZkV2lTcGlcL1wvalQzQ09QbUE9PSIsIm1hYyI6IjYyMzM5MGM4MjYxNzYzNmI5NGYyZDFmMTU3M2M4NTA5NzBlYjZlMGZmMmViM2QzNjlhZjZmNTdlMmE4ZmRjMmUifQ=="
    "laravel_session" => "eyJpdiI6Illzd2xnalRXVzhKaVI0blRQUUtiNXc9PSIsInZhbHVlIjoiKzVaQVR0cHNqbDZEcGd5UG9POWFhbFdyYzhaTDNqb1FOQ2xmcEFYVUZUZTJkNUZSYzNRUlhCajJhNHBNK3VXd2gxYlwvUWtiTEE0bk5lVmp0d2lcL3pkQT09IiwibWFjIjoiNjA5MDU2ODViYTQ4YmM0YjlmYWVmOWY1NzliY2Y3YjdhYjMzYTA0MWU4ZjMwODg0N2E5NGI2N2U2ZDc3MTIwNSJ9"
    "yetAnotherCookie" => "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  ]
}

失败
ParameterBag {#40
  #parameters: array:4 [
    "__unam" => "bc7c68-14f8d12a5ef-43097c02-217"
    "XSRF-TOKEN" => "eyJpdiI6ImV6aklvVVNwZHdCMThON1hQOW9rcmc9PSIsInZhbHVlIjoiWlY1aGdQamJ1Y2FQTGxTUDZTTmxPK2xLZm5xZG15enlVXC95RXhRMHNqbm9udkp5T3NnR3FBQ0dxRWEzYTdIVUFveHA1TTZkV2lTcGlcL1wvalQzQ09QbUE9PSIsIm1hYyI6IjYyMzM5MGM4MjYxNzYzNmI5NGYyZDFmMTU3M2M4NTA5NzBlYjZlMGZmMmViM2QzNjlhZjZmNTdlMmE4ZmRjMmUifQ=="
    "laravel_session" => "eyJpdiI6Illzd2xnalRXVzhKaVI0blRQUUtiNXc9PSIsInZhbHVlIjoiKzVaQVR0cHNqbDZEcGd5UG9POWFhbFdyYzhaTDNqb1FOQ2xmcEFYVUZUZTJkNUZSYzNRUlhCajJhNHBNK3VXd2gxYlwvUWtiTEE0bk5lVmp0d2lcL3pkQT09IiwibWFjIjoiNjA5MDU2ODViYTQ4YmM0YjlmYWVmOWY1NzliY2Y3YjdhYjMzYTA0MWU4ZjMwODg0N2E5NGI2N2U2ZDc3MTIwNSJ9"
    "yetAnotherCookie" => "abcdefghijklmnopqrstuvwxyzABCDEFGHIJK"
  ]
}

这次只截断了 yetAnotherCookie ,而不是 laravel_session 。再次查看 HTTP 请求,尽管首先设置了此 cookie(我猜 Chrome 将 cookie 列表按字母顺序排列?),但现在它的完整列表更短了:
__unam=bc7c68-14f8d12a5ef-43097c02-217; XSRF-TOKEN=eyJpdiI6ImV6aklvVVNwZHdCMThON1hQOW9rcmc9PSIsInZhbHVlIjoiWlY1aGdQamJ1Y2FQTGxTUDZTTmxPK2xLZm5xZG15enlVXC95RXhRMHNqbm9udkp5T3NnR3FBQ0dxRWEzYTdIVUFveHA1TTZkV2lTcGlcL1wvalQzQ09QbUE9PSIsIm1hYyI6IjYyMzM5MGM4MjYxNzYzNmI5NGYyZDFmMTU3M2M4NTA5NzBlYjZlMGZmMmViM2QzNjlhZjZmNTdlMmE4ZmRjMmUifQ%3D%3D; laravel_session=eyJpdiI6Illzd2xnalRXVzhKaVI0blRQUUtiNXc9PSIsInZhbHVlIjoiKzVaQVR0cHNqbDZEcGd5UG9POWFhbFdyYzhaTDNqb1FOQ2xmcEFYVUZUZTJkNUZSYzNRUlhCajJhNHBNK3VXd2gxYlwvUWtiTEE0bk5lVmp0d2lcL3pkQT09IiwibWFjIjoiNjA5MDU2ODViYTQ4YmM0YjlmYWVmOWY1NzliY2Y3YjdhYjMzYTA0MWU4ZjMwODg0N2E5NGI2N2U2ZDc3MTIwNSJ9; yetAnotherCookie=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
这次它在 685 字节处切断,而不是之前的 678 字节。越来越好奇。

更新 2

这是另一个奇怪的。我试着打一个 稍微有点 不同的端点。而不是 www.mywebsite.com/api/employees/1 ,我 ping www.mywebsite.com/api/employees/10
这次从 cookie 字符串中删除了一个额外的字母。这促使我再次查看整个原始 HTTP 请求。当 cookie 字符串被切断时,原始 HTTP 请求中正好有 1435 个字节。

所以我又进行了一次实验:我从浏览器中使用以下 javascript 发送了一个巨大的自定义 header
$.ajax('/api/employees/1', {
method: 'PATCH',
headers: {'X-REALLY-LONG-HEADER': 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'},
success: function(data) { console.log(data); }
});

我还稍微修改了返回值,因为 Laravel 的 dd() 函数将返回值包装在大量 HTML 中,这使得在控制台中难以解释。有了很长的标题,经过几次尝试,我得到了以下信息:
Cookies:
__unam = bc7c68-14f8d12a5ef-43097c02-217
XSRF-TOKEN = eyJpdiI6ImV6aklvVVNwZHdCMThON1hQOW9rcmc9PSIsInZhbHVlIjoiWlY1aGd

这实际上是原始请求中的 1460 字节......我不确定如何解释它行为不同的事实,但这表明在 PHP 的内置服务器在HTTP 请求。

更新 3

尝试将 PHP 升级到 5.6

第一次 apt-get 失败了。 apt-get install --only-upgrade php5 刚刚安装了一个稍微更新的 5.5.9

然后我从 php.net 下载了源代码并尝试从源代码构建。根据 INSTALL 指令,你应该在运行 ./configuremake 之前运行 make install ,所以我试了一下。过了一会儿,我得到了以下信息:
...
checking for strftime... (cached) yes
checking which regex library to use... php
checking whether to enable LIBXML support... yes
checking libxml2 install dir... no
checking for xml2-config path... 
configure: error: xml2-config not found. Please check your libxml2 installation.

我尝试用 apt-get install libxml2 更新它并得到以下结果:
root@C9-workspace:~/php-5.6.13# apt-get install libxml2
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libxml2 is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 200 not upgraded.

由于 ./configure 使我失败并且我无法升级 libxml2,我尝试安装:
root@C9-workspace:~/php-5.6.13# make
make: *** No targets specified and no makefile found.  Stop.

我可能只是作为服务器管理员不称职,但我不知道如何在没有有用的 MSI 文件的情况下安装 PHP 5.6

最佳答案

恭喜,您找到了 PHP bug ;我刚举报了

你现在不能做任何事情,除了等待修复。

正如我在错误报告中指出的那样,原因确实是 header 太大,因此浏览器将其拆分为多个 TCP 数据包……而 sapi/cli/php_http_parser.c 中的 HTTP 解析器目前似乎没有备份带有 header 值的缓冲区,以防它需要等待下一个数据包并稍后将其与下一个数据包合并。因此,它最终被截断。

正如代码有时比文字更能说明问题:一个简单的重现案例:http://git.php.net/?p=php-src.git;a=commitdiff;h=37d814b84cff3678a2e1d56ea9d3ba3c35082e13

关于PHP $_COOKIE 未完全填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32428076/

相关文章:

PHP - MSSQL 从存储过程获取结果

java - 使用 apache、java、tomcat、mysql 设置 AMI linux 微实例

spring - Apache 与 Tomcat 代理 : not showing images

php - 如何在 laravel 8 中自定义默认分页?

javascript - v-model 不使用 switch 更改数据并在 vuejs 中选择下拉列表

javascript - AngularJs 发布请求获取错误

php - 如何限制 CakePHP 查询的输出?

php - ReflectionException 类 App\Http\Controllers\PostsController 不存在 Lumen 5.5

php - 如何在 Docker 容器中为 PHP 安装 mod_rewrite 模块?

database - 我们可以在 Laravel 中使用 Firebase 数据库吗?优缺点都有什么?