我在Expression Engine中遇到了联系表单的问题。我正在使用文档中的代码,但在提交后我收到此错误:
This form has expired. Please refresh and try again.
我的代码:
{exp:email:contact_form user_recipients="no" recipients="my@emailadress.com" charset="utf-8"}
<h2>Support Form</h2>
<p>
<label for="from">Your Email:</label><br />
<input type="text" id="from" name="from" size="40" maxlength="35" value="{member_email}" />
</p>
<p>
<label for="subject">Subject:</label><br />
<input type="text" id="subject" name="subject" size="40" value="Contact Form" />
</p>
<p>
<label for="message">Message:</label><br />
<textarea id="message" name="message" rows="18" cols="40">
Support Email from: {member_name}
Sent at: {current_time format="%Y %m %d"}
</textarea>
</p>
<p>
<input name="submit" type='submit' value='Submit Form' />
</p>
{/exp:email:contact_form}
我正在使用Expression Engine 2.8.0。谢谢你们!
答案 0 :(得分:8)
EE要求XID在表单中。您可以使用一个全局变量来生成XID哈希:
&lt; input type =&#34; hidden&#34;命名=&#34; XID&#34;值=&#34; {XID_HASH}&#34; /&GT;
http://ellislab.com/blog/entry/putting-the-secure-in-secure-mode-forms
答案 1 :(得分:3)
对于我们来说,将此添加到config.php'修复'问题(更像是,因为它不是一个理想的情况,在它上面加上一个bandaid)
$config[‘disable_csrf_protection’] = “y”;
答案 2 :(得分:0)
我认为这是安全表单XID哈希的问题。您只能在使用“安全表单”时提交表单一次(以阻止垃圾邮件发送者劫持他们)。
禁用它的一种快捷方法是打开 system / expressionengine / config / config.php 并将其添加到底部以禁用它。看看这对你有所帮助。
$config["secure_forms"] = "n";
显然,使用安全表格是可取的。
答案 3 :(得分:0)
我只在Chrome中遇到此问题,而不是在Firefox或Safari中。我挖到PHP并意识到它在Csrf.php中检查失败了:
// Fetch data, these methods enforce token time limits
$this->fetch_session_token();
$this->fetch_request_token();
// Main check
if ($this->request_token === $this->session_token)
{
return TRUE;
}
然后我意识到我已将Chrome设置为阻止Cookie。我设置它以便Chrome允许使用Cookie,我不再收到错误消息。