Magento 2:用户登录有时需要在多商店设置中登录两次


9

我正在尝试使用共享购物车设置一个多商店。但是,用户登录有时不起作用。

该Store Switcher工作正常,但前端User Login的第二和第三个Store要求我按一下Sign In按钮两次登录。

我通过以下设置设置了多个商店:

多域(虚拟主机)

我正在使用一个Website。该站点将有三个Stores。域名将共享一个公共基本域。其他商店将使用子域。

我创建了magento2.com作为默认基本域。

我创建了store2.magento2.com作为第二家商店。

我创建了store3.magento2.com作为第三家商店。

在此处输入图片说明


根类别和测试产品

我创建了Store2 Root Category和Store3 Root Category。我还在每个根目录类别下创建了子类别。

在此处输入图片说明

我在每个子类别中添加了一个测试产品。

在此处输入图片说明


商店和景观

我没有在“ 主要网站商店”和“ 默认商店视图”上进行任何更改。

我为第二家商店创建了Store2和Store View 2。

我为第三家商店创建了Store3和Store View 3。

在此处输入图片说明


对于Store2,我将Store2设置为,Name并将Store2根目录类别选择为Root Category。

在此处输入图片说明


对于Store View 2,我选择Store2为Store,使用Store View 2为Name,并输入store2为Store Code。

在此处输入图片说明


对于3rd Store,我将Store3设置为,Name并将Store3根目录类别选择为Root Category。

在此处输入图片说明


对于Store View 3,我选择Store3为Store,使用Store View 3为Name,并输入store3作为Store Code。

在此处输入图片说明


URL和Cookie设置

在Configuration现在屏幕显示下5个选项Store View下拉菜单:

  1. Default Config
  2. Main Website
  3. Default Store View
  4. 店铺检视2
  5. 店铺景观3

在此处输入图片说明

我更改了Default Store View“ 商店视图2 ”和“ 商店视图3”的 URL和Cookie设置 。

我没有改变URL或Cookie设置为Default Config和Main Website。


因为Default Store View,我改变了Cookie Path。

在此处输入图片说明


对于商店查看2,我改变了Base URL和Cookie Path。

在此处输入图片说明

在此处输入图片说明


对于商店查看3,我改变了Base URL和Cookie Path。

在此处输入图片说明

在此处输入图片说明


账户共享

要在多个商店之间共享用户帐户和购物车,我Share Customer Accounts从下的“每个网站” 更改为“ 全局 ” Default Config。

在此处输入图片说明


.htaccess更改

我.htaccess在项目根目录的文件顶部添加了这些行。

#Multi store setting
SetEnvIf Host magento2.com MAGE_RUN_CODE=default
SetEnvIf Host magento2.com MAGE_RUN_TYPE=store
SetEnvIf Host ^magento2.com MAGE_RUN_CODE=default
SetEnvIf Host ^magento2.com MAGE_RUN_TYPE=store

SetEnvIf Host store2.magento2.com MAGE_RUN_CODE=store2
SetEnvIf Host store2.magento2.com MAGE_RUN_TYPE=store
SetEnvIf Host ^store2.magento2.com MAGE_RUN_CODE=store2
SetEnvIf Host ^store2.magento2.com MAGE_RUN_TYPE=store

SetEnvIf Host store3.magento2.com MAGE_RUN_CODE=store3
SetEnvIf Host store3.magento2.com MAGE_RUN_TYPE=store
SetEnvIf Host ^store3.magento2.com MAGE_RUN_CODE=store3
SetEnvIf Host ^store3.magento2.com MAGE_RUN_TYPE=store


index.php更改

使用Store Switcher有时需要单击两次以从store2 / 3切换到默认值。要解决此问题,我必须$_COOKIE['store']在index.php处重置其值:

<?php
/**
 * Application entry point
 *
 * Example - run a particular store or website:
 * --------------------------------------------
 * require __DIR__ . '/app/bootstrap.php';
 * $params = $_SERVER;
 * $params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'website2';
 * $params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'website';
 * $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
 * \/** @var \Magento\Framework\App\Http $app *\/
 * $app = $bootstrap->createApplication('Magento\Framework\App\Http');
 * $bootstrap->run($app);
 * --------------------------------------------
 *
 * Copyright © 2016 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */

try {
    require __DIR__ . '/app/bootstrap.php';
} catch (\Exception $e) {
    echo <<<HTML
<div style="font:12px/1.35em arial, helvetica, sans-serif;">
    <div style="margin:0 0 25px 0; border-bottom:1px solid #ccc;">
        <h3 style="margin:0;font-size:1.7em;font-weight:normal;text-transform:none;text-align:left;color:#2f2f2f;">
        Autoload error</h3>
    </div>
    <p>{$e->getMessage()}</p>
</div>
HTML;
    exit(1);
}

// Fix store switcher bug on switching to the default store
if ( isset($_SERVER['MAGE_RUN_TYPE']) == 'store' && isset($_SERVER['MAGE_RUN_CODE']) ) {
    if ( !empty($_SERVER['MAGE_RUN_CODE']) ) {
        $_COOKIE['store'] = $_SERVER['MAGE_RUN_CODE'];
    }
}

$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
/** @var \Magento\Framework\App\Http $app */
$app = $bootstrap->createApplication('Magento\Framework\App\Http');
$bootstrap->run($app);


用户登录有时需要单击两次

通过上述设置,Store Switcher可以正常工作。购物Cart在所有3个商店中共享给已登录和未登录用户。

在此处输入图片说明

但是,在Store2和Store3上,前端user login有时会重定向回同一登录页面。如果按Sign In重定向登录页面上的按钮(第二次单击此按钮),就让我登录。

有没有办法解决这个问题?


更新:禁用 Cache

我从命令行禁用了缓存:

php bin/magento cache:disable

随着禁用缓存,user login在商店2和Store3变得更加稳定。在10次尝试中,它仍然重定向回登录页面1,但是此更改使登录工作更好。

但是,整个站点变慢了!!!

有没有一种方法可以正确配置缓存以使其在user login多重Store设置中正确执行?


嗨,您能解决这个问题吗?我的网站上也遇到了同样的问题。登录信息不会在单个网站下的商店之间共享。您能否分享您的解决方案
— Zammuuz

Answers:


0

通过新配置,我们设法使商店切换台和登录更加稳定。

将商店代码添加到Urls

最大的更改是设置Add Store Code to Urls为“是”。

存储=>
“设置”部分中的配置=>
选择Default Config=>“
常规”部分中的“ Web” =>“
URL选项” =>
  更改Add Store Code to Urls为“是”

在此处输入图片说明

 

删除Cookie域

然后,我们从“配置”页面中删除Cookie Domain了Store2和Store3中的值。

商店=>
设置部分中的配置=>
选择商店2或商店3 =>
常规部分中的Web =>
默认Cookie设置=>
  从中删除该值Cookie Domain并将其留空

在此处输入图片说明

 

从.htaccess和删除自定义代码index.php

然后,我们删除了自定义代码行form .htaccess和index.php。

使用新配置,不再需要对这些文件进行自定义。这是很棒的,更简洁的代码。

 

完成这些更改后,商店切换器,共享购物车和用户登录变得更加稳定。进行这些更改后,请确保清除缓存。

 

Magento2核心升级及其对.htaccess和的影响index.php

在进行配置和文件更改之前,我们使用将该Magento2核心从2.1.0升级到2.1.3 composer。(参考:将Magento 2.1.2更新为2.1.3)

我们不确定这是否是此多商店配置的必需部分,但是我们执行了此操作,希望该站点使用2.1.3版的最新更新将使其更加稳定。

我们修改了3个文件,它们是核心文件和模块文件的一部分(这些文件被我们的Git版本控件忽略):

  1. .htaccess
  2. index.php
  3. dev / tools / grunt / configs / themes.js(Grunt配置文件,用于编译我们的自定义主题CSS)

当我们升级Magento2时,这些文件将重置为2.1.3的初始状态。我们不必手动清理我们的.htaccess和index.php文件。升级会自动重置文件内容。这是一个积极的副作用。

但是也有不良的副作用。核心升级已重置并清除了Grunt配置文件中的自定义代码。我们必须手动在此文件上还原我们的自定义代码行。

我建议先进行文件和数据库备份,然后再进行此核心升级和配置/文件更改。


缩小JavaScript可能会有所帮助

缩小JS使整个网站在我们的网站上更加稳定。


在“设置”部分中存储=> 配置=>
选择Default Config=>“
高级”部分中的开发人员=>
JavaScript设置=>
  设置Merge JavaScript Files为“是” =>
  设置Enable JavaScript Bundling为“是” =>
  设置Minify JavaScript Files为“是” =>
然后清除缓存

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.