客户登录在1.9中不起作用


42

我刚刚进行了Magento 1.9.0.1的全新安装,并且看到客户登录表单的行为很奇怪。

在Chrome(版本36)中,登录表单不起作用。我只是被重定向到登录页面。没有错误信息。但是,当我打开一个新的隐身窗口时,我可以正常登录。认为这是一个cookie问题,因此我从浏览器中清除了所有cookie,然后再次尝试,得到了相同的结果。在这两种情况下,我都可以登录到管理面板而没有任何问题。

我也在Firefox和Safari中都尝试过此操作。Firefox我会看到同样的事情(但是并不一致,我可以通过清除cookie来修复它),并且我无法在Safari中复制。

在任何其他版本的Magento中,我都从未遇到过这个问题。Magento处理1.9版中的cookie的方式是否有某种根本性的变化,并且/或者我可以做些什么使它更稳定?


您可以共享链接并测试用户/通过

不幸的是,所有这些都捆绑在我的工作的VPN之后。
2014年

重新安装Chrome并进行验证。
Niloct

重新安装后结果相同。
2014年

1
我曾经有一个客户的网站类似的问题,问题是,当网站访问没有wwwabc.com然后将其重定向到www.abc.com。在这种情况下,浏览器正在为这两者设置cookie,并且登录特别停止了工作,但是如果我手动删除没有www登录的cookie再次开始工作,您能检查一下是否也是如此吗?
MTM

Answers:


38

我有同样的问题....

答案是您的主题没有提供名为的变量form_key

如上所述,我必须添加:

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />

您在之后添加它 <ul class="form-list">

login.phtml主题的每个文件中。

您可能还遇到购物车项目更新数量方面的问题

这是重要性form_keys

自从开始以来,Magento的后端就包含一个防止XSS攻击的表单密钥[1]。使用Magento 1.8,表单密钥进入前端的原因几乎相同:使用浏览器来防止从另一个网站提交表单。当您位于其他浏览器标签中时,恶意攻击者可以向购物车中添加东西,甚至为您完成订单。这依赖于可预测的URL,因为该站点将无权访问等待Magento订单的浏览器选项卡中的实际HTML内容。但是,发送到Magento商店的所有内容都将提交您的Cookie,从而使用您的会话。

通过向每个表单或在服务器上生成操作的每个链接添加唯一键,URL或表单内容将变得不可预测。表单密钥存储在会话数据中,并在提交到服务器后进行验证。如果它们不匹配,您将收到一个表单键错误,并且该操作未完成。


3
将上述“ form_key”隐藏输入添加到位于以下位置的表单中:app / design / frontend / base / default / template / persistent / checkout / onepage / login.phtml
Flipmedia 2014年

5
使用的代码片段要好得多,<?php echo $this->getBlockHtml('formkey'); ?>而不是大量的输入。
Navar's

在表单结束标记<?php echo $ this-> getBlockHtml('formkey');之前粘贴此代码。?>
塔希尔·亚辛

美丽,这对我有用。非常感谢我投票!
CodingMageSheen '17

哇,我搜寻这个>。<!很久了 非常感谢!
Keenora Fluffball

8

可能是:

cookie setting issue in Chrome browser

要么

Magento 1.9正在使用 form key validation at customer loggin and register页面。

Post action它上面检查using function _validateFormKey()控制器上的表单键

form key issue: form key missing 所以在您的表单中添加此代码

<input name="form_key" type="hidden" value="<?php echo Mage::getSingleton('core/session')->getFormKey() ?>" />

要么

Cookie domain setting issue 转到检查设置是否正确

Admin>System>configuration>General>Web>Session Cookie Management


1
登录表单确实已经有form_key字段,并且我设置了Cookie域,但这也没有解决。
2014年

请从浏览器或Goto accountcontroller.php中删除cookie,检查(!$ this-> _ validateFormKey()){是否有效
Amit Bera

表单密钥正在正确验证。实际上,看起来loginPostAction运行得很好。
2014年

1
@AmitBera我可以见到你吗magento聊天吗?我的愿望清单模块有相关问题吗?
蝴蝶

@AmitBera我已经设置了密钥,但是仍然无法正常工作。同样在accountcontroller.php中if (!$this->_validateFormKey()) {返回false,这意味着Magento无法验证提供的密钥。知道为什么会这样吗?
Arvind17年

6

由于这个问题似乎是饼干的关系,尝试增加cookie的生命时间,86400之下

Sytem -> Configuration -> Web -> Session and Cookie Management


原因可能是,默认情况下Cookie的生存期设置为3600(1小时)。但是,如果最终用户的计算机时间早于服务器时间,则将不会为Magento前端和后端设置cookie。例如,最终用户的计算机时间比服务器的时间早1小时,这意味着Cookie(持有用户的会话ID)将在用户登录或尝试添加项目后立即失效。


4

对于将来的读者:此问题有很多可能的原因。登录期间,出于安全原因抑制了某些异常日志记录,因此您的问题不会显示在中var/log/exception.log

要诊断您的问题,请执行以下操作:

  1. 打开app/code/core/Mage/Customer/controllers/AccountController.php并转到loginPostAction方法。
  2. 暂时取消Mage::logException($e);通话注释 并保存更改
  3. 尝试再次从前端登录以触发相同的异常。
  4. 查看异常日志中的最后一个错误并进行调查。
  5. 重复前两个步骤,直到不再引发任何异常。

不要忘记撤消对的更改app/code/core/Mage/Customer/controllers/AccountController.php

我的问题的原因是,由于模块(错误地)使用<codePool>community</codePool>而不是,导致类无法自动加载<codePool>local</codePool>


我尝试了您的解决方案,但没有登录,但没有exception.log被创建!
2016年

4

我通过在持久性登录phtml文件中添加以下代码行来解决此问题。

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />

1
感谢您的解决方案。我已经花了将近半天的时间。终于找到了解决方案。
Gaurav Agrawal's

3

好了,经过了半个小时的努力,我才发现我必须更改其中的login.phtml文件夹。所以去

/app/design/frontend/default/template-name/template/persistent/customer/form/

并粘贴

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />

<ul class="form-list">

而已。


3

如果您使用的是Varnish缓存,则可能会有其他问题。我引用的是我在其他地方找到的解决方案。 https://github.com/nexcess/magento-turpentine/issues/169

然后我们开始...上次发生在我身上的问题是登录问题,我注意到我“获得”了两个不同的同名Cookie。“ frontend”。除了“域”字段。在第一个Cookie中,域值为“ mydomain.com”,而在第二个中为“ www.mydomain.com”。当用户还没有前端cookie并在其浏览器的url中键入“ mydomain.com”时,就会发生这种情况。这会触发错误的“前端” cookie的设置并将事情搞砸!回到我们的服务器中,我们有一条规则,如果Web用户点击“ mydomain.com”为他服务“ www.mydomain.com”。这意味着在用户的浏览器中,地址栏中的网址是从“ mydomain.com”打开的 到“ www.mydomain.com”。我不确定这与登录问题有关。我只提到它。解决方案:在松节缓存选项的magento配置中,有一个选项“ Normalise host”。您必须启用它。就这样!这之后没有任何混乱的事情了,没有双重前端cookie!希望这可以帮助!


2

此问题的原因是自定义登录表单不包含任何form_key,并且Magento的loginPostAction中发生了表单密钥验证。

您可以按以下方式修复它:

  1. 转到app / design / frontend / [您的软件包] / [您的主题] /template/customer/form/login.phtml

找:

并将其粘贴在上面的代码之后:

<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>" />
  1. 转到app / design / frontend / Your-package] / [Your-theme] /template/persistent/customer/form/login.phtml并应用相同的更改。

1

上面的代码对我来说确实很好,但是我从Magento 1.4.1升级到1.9.1如此巨大的飞跃。这些文件在上面的位置找不到,但是位于app / design / frontend / BASE文件夹中。

/ app / design / frontend / BASE / default / template / persistent / customer / form /

自Magento 1.4以来,此基本文件夹包含许多常用文件,因此我阅读了...希望这可以节省某人花了我很多时间的工作。


1

如果您使用的是任何社交登录扩展名,请在该login.phtm文件中添加表单密钥


1
<input name =“ form_key” type =“ hidden” value =“ <?php echo Mage :: getSingleton('core / session')-> getFormKey()?>” />
Yatin Patel

1

确保已在服务器上安装并启用了php-mbstring。

如果不是,那么管理员登录将起作用,而客户则不会。

可以通过查看输出phpinfo()或通过临时启用以下行177中的登录异常来完成此检查:app/code/core/Mage/Customer/controllers/AccountController.php

请注意,该操作可能会在记录的异常跟踪中泄露客户密码。


0

我遇到了同样的问题,并通过删除所有cookie解决了它。如果您有多个不同的magento商店并同时登录它们,则似乎会发生此问题。

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.