同时404个请求太多会导致会话丢失

时间:2017-08-31 13:02:23

标签: php apache laravel session http-status-code-404

我有一个网站,用相应的标志加载国家/地区下拉列表。我目前没有可用的所有旗帜,所以我收到了几张404。这是预期的,没有什么可担心的。

奇怪的是我失去了登录会话。当页面加载后我离开(甚至页面刷新),我需要重新登录。这种情况每次都在发生,而不是随意发生。

如果我在脚本中只请求一个有缺陷的(404)图像,一切正常,因为我不会丢失会话。

〜我使用Laravel,如果重要的话

Ubuntu 16.04 PHP version 7.0.22 Apache 2.0 Laravel 4.2

Laravel会话配置: 'driver' => 'file', 'lifetime' => 120, 'expire_on_close' => false,

apache2/access.log的一部分:

<IP> - - [31/Aug/2017:14:35:35 +0200] "GET /admin/user/edit/1 HTTP/1.1" 200 15970 "https://<dev_website>/admin" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Geck$
<IP> - - [31/Aug/2017:14:35:36 +0200] "GET /img/flags/nl_0.png HTTP/1.1" 404 12585 "https://<dev_website>/admin/user/edit/1" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHT$
<IP> - - [31/Aug/2017:14:35:36 +0200] "GET /img/flags/nl_1.png HTTP/1.1" 404 12740 "https://<dev_website>/admin/user/edit/1" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHT$
<IP> - - [31/Aug/2017:14:35:36 +0200] "GET /img/flags/nl_4.png HTTP/1.1" 404 12738 "https://<dev_website>/admin/user/edit/1" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHT$
<IP> - - [31/Aug/2017:14:35:36 +0200] "GET /img/flags/nl_7.png HTTP/1.1" 404 12583 "https://<dev_website>/admin/user/edit/1" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHT$
<IP> - - [31/Aug/2017:14:35:36 +0200] "GET /img/flags/nl_6.png HTTP/1.1" 404 12591 "https://<dev_website>/admin/user/edit/1" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHT$
<IP> - - [31/Aug/2017:14:35:36 +0200] "GET /img/flags/nl_14.png HTTP/1.1" 404 12583 "https://<dev_website>/admin/user/edit/1" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KH$
<IP> - - [31/Aug/2017:14:35:36 +0200] "GET /img/flags/nl_12.png HTTP/1.1" 404 12583 "https://<dev_website>/admin/user/edit/1" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KH$
<IP> - - [31/Aug/2017:14:35:36 +0200] "GET /img/flags/nl_11.png HTTP/1.1" 404 12585 "https://<dev_website>/admin/user/edit/1" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KH$
<IP> - - [31/Aug/2017:14:35:36 +0200] "GET /img/flags/nl_21.png HTTP/1.1" 302 1078 "https://<dev_website>/admin/user/edit/1" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHT$
<IP> - - [31/Aug/2017:14:35:36 +0200] "GET /img/flags/nl_18.png HTTP/1.1" 302 1080 "https://<dev_website>/admin/user/edit/1" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHT$
1

1 个答案:

答案 0 :(得分:2)

当浏览器在短时间内发出许多请求时,依赖文件的会话很难正常工作,因为每个脚本执行都会锁定会话文件,直到脚本完成或调用session_write_close()。因此,其他请求无法尽快访问会话。这可能会导致您的问题。

我认为最简单的解决方案是在.htaccess中添加一个RewriteRule,它会将对不存在的标志图像的请求重定向到现有的占位符图像。类似的东西:

<强>的.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^img/flags/\w+.png$ /img/flags/placeholder.png [L]

当然,您需要创建/img/flags/placeholder.png。重定向不应影响现有文件。