Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
服务器上的Laravel会话缓存(配置错误)_Laravel_Session_Devops - Fatal编程技术网

服务器上的Laravel会话缓存(配置错误)

服务器上的Laravel会话缓存(配置错误),laravel,session,devops,Laravel,Session,Devops,我在Laravel的会话中遇到了一个奇怪的问题,在任何地方都找不到解决方案。我终于明白了,我想我会和大家分享,希望它能在将来帮助别人 太长,读不下去了 问题:Engintron配置微缓存混淆了会话ID 解决方案:将会话cookie名称从laravel\u会话更改为userID 完整故事: 问题:只有在登录过程中我才真正注意到这个问题,因为这是会话最重要的地方。我注意到,如果两个用户同时或几乎同时登录,那么他们将切换身份,或者后者将使用先前用户的身份。我还注意到,后者在作为该用户登录时会使用前

我在Laravel的会话中遇到了一个奇怪的问题,在任何地方都找不到解决方案。我终于明白了,我想我会和大家分享,希望它能在将来帮助别人


太长,读不下去了 问题: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;
}