跨域后期刷新会清除会话值

时间:2014-11-24 14:45:15

标签: javascript ruby-on-rails session

我从http://fromDomain.com获得了类似这样的html,并发布到了http://toDomain.com这是一个rails应用程序。

    <html>
    <h1>Test Redirect with Post</h1>
    <button id="submit" onclick="send_form()">Submit</button>

    <script>
    function send_form() {
        var form = document.createElement("form");
        form.setAttribute("method", 'post');
        form.setAttribute("action", 'http://todomain.com/someaction');
        form.appendChild(addElement('field1',  'field1'));
        form.appendChild(addElement('field2',  'field2)');
        document.body.appendChild(form);
        form.submit();}

    function addElement(key, value){
       var hiddenField = document.createElement("input");
       hiddenField.setAttribute("type", "hidden");
       hiddenField.setAttribute("name", key);
       hiddenField.setAttribute("value", value);
       return hiddenField;}
    </script>
    </html>

在rails应用程序中,我正在做这样的事情。

def someaction

if  not session[:token]
 session[:token] = @self.getsomehash
end 
end

问题是在http://todomain.com/someaction页面加载后,如果用户点击浏览器刷新,那么它将重新发布页面并重置会话哈希。看起来我在浏览器发布时会重新发布一个新会话,而不是使用现有会话。

我的假设是对的吗?有没有办法允许刷新并仍然保持值仍然?

1 个答案:

答案 0 :(得分:0)

听起来你需要Redirect-on-POST模式 - 基本上你需要配置服务器应用程序以发送重定向以响应每个POST请求。