表达式引擎:此表单已过期。请刷新并重试

时间:2014-03-18 19:15:20

标签: expressionengine

我在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。谢谢你们!

4 个答案:

答案 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,我不再收到错误消息。