服务器上的Laravel会话缓存(配置错误)
我在Laravel的会话中遇到了一个奇怪的问题,在任何地方都找不到解决方案。我终于明白了,我想我会和大家分享,希望它能在将来帮助别人服务器上的Laravel会话缓存(配置错误),laravel,session,devops,Laravel,Session,Devops,我在Laravel的会话中遇到了一个奇怪的问题,在任何地方都找不到解决方案。我终于明白了,我想我会和大家分享,希望它能在将来帮助别人 太长,读不下去了 问题:Engintron配置微缓存混淆了会话ID 解决方案:将会话cookie名称从laravel\u会话更改为userID 完整故事: 问题:只有在登录过程中我才真正注意到这个问题,因为这是会话最重要的地方。我注意到,如果两个用户同时或几乎同时登录,那么他们将切换身份,或者后者将使用先前用户的身份。我还注意到,后者在作为该用户登录时会使用前
太长,读不下去了 问题:Engintron配置微缓存混淆了会话ID 解决方案:将会话cookie名称从
laravel\u会话
更改为userID
完整故事: 问题:只有在登录过程中我才真正注意到这个问题,因为这是会话最重要的地方。我注意到,如果两个用户同时或几乎同时登录,那么他们将切换身份,或者后者将使用先前用户的身份。我还注意到,后者在作为该用户登录时会使用前者的会话cookie 配置:Laravel 6.2、PHP 7.2和Engintron将NGINX集成到cPanel/WHM
原因:此处发生的情况是会话正在缓存,而后者用户正在使用缓存版本登录。详细原因: 这是Engintron的代理参数dynamic的默认设置的一部分
# CMS (& CMS extension) specific cookies (e.g. Joomla, K2 for Joomla, WordPress, WooCommerce, PrestaShop etc.)
if ($http_cookie ~* "(joomla_[a-zA-Z0-9_]+|userID|wordpress_(?!test_)[a-zA-Z0-9_]+|wp-postpass|comment_author_[a-zA-Z0-9_]+|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_[a-zA-Z0-9]+|sid_customer_|sid_admin_|PrestaShop-[a-zA-Z0-9]+)") {
set $CACHE_BYPASS_FOR_DYNAMIC 1;
set $EXPIRES_FOR_DYNAMIC 0;
}
这里发生的事情是Engintron将微切任何与以下情况不同的cookie:
joomla_[a-zA-Z0-9_]+|userID|wordpress_(?!test_)[a-zA-Z0-9_]+|wp-postpass|comment_author_[a-zA-Z0-9_]+|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_[a-zA-Z0-9]+|sid_customer_|sid_admin_|PrestaShop-[a-zA-Z0-9]+
请注意,laravel\u session
不在其中。因此,Engintron将微缓存任何laravel会话Cookie,在这些配置下,您可能会允许用户错误登录到另一个帐户
解决方案:
有两种方法可以解决这个问题。您可以调整服务器或应用程序中的配置
A) 在拉维尔:
将config/session.php第127行更改为:
'cookie' => env(
'SESSION_COOKIE',
Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
),
到
B) 在服务器上:
或者只需在特定cookie列表中添加laravel\u session
或任何您正在命名的应用程序cookie,如下所示:
if ($http_cookie ~* "(laravel_session|joomla_[a-zA-Z0-9_]+|userID|wordpress_(?!test_)[a-zA-Z0-9_]+|wp-postpass|comment_author_[a-zA-Z0-9_]+|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_[a-zA-Z0-9]+|sid_customer_|sid_admin_|PrestaShop-[a-zA-Z0-9]+)") {
set $CACHE_BYPASS_FOR_DYNAMIC 1;
set $EXPIRES_FOR_DYNAMIC 0;
}
我希望这对某人有所帮助:)
快乐编码 我还将此问题通知了Engintron:谢谢,解决方案A有效!但是…你能解释一下为什么你把“cookie”键设为“userID”吗?我在寻找关于它的信息,但什么都没有得到。再次感谢,Laravel对来宾和登录用户使用了相同的cookie,我如何解决这个问题?@Zione01,请参阅我上面设置的两个解决方案。@Benyi,这实际上是针对不同框架/CMS的一个全面策略。也就是说,你还有Joomla,wordpress等等。所以,这对大多数使用Engintron的人来说应该是可行的。这是一个关键的错误,会话根本不应该被缓存。是的,你完全正确@Viney。我在这方面遇到了一些麻烦,不幸的是,我在网上几乎找不到什么文档。希望这能帮助其他人并为他们节省大量时间。:)
if ($http_cookie ~* "(laravel_session|joomla_[a-zA-Z0-9_]+|userID|wordpress_(?!test_)[a-zA-Z0-9_]+|wp-postpass|comment_author_[a-zA-Z0-9_]+|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_[a-zA-Z0-9]+|sid_customer_|sid_admin_|PrestaShop-[a-zA-Z0-9]+)") {
set $CACHE_BYPASS_FOR_DYNAMIC 1;
set $EXPIRES_FOR_DYNAMIC 0;
}