交叉子域ajax表单提交会话

时间:2013-10-03 08:35:19

标签: javascript php jquery

我在这里做点什么。

的Javascript

  $('#create').submit(function() {
$.ajax({ 
    data: $(this).serialize(),
    type: $(this).attr('method'), 
    url: $(this).attr('action'), 
    success: function(response) {
        console.log(response);
    }
});
return false;
});

Php文件(网址):

session_start();
header('Access-Control-Allow-Origin: *');
session_set_cookie_params( time() + 3600, '/', '.domain.com');
print_r($_SESSION);
die;

在页面上的表格为my session [memberid] = [some int];

但是,如果我进行ajax调用,则整个sesison变量为空

我试着在google上寻找一些答案,我试着寻找堆栈溢出的答案

但没有任何帮助。我不喜欢使用iframe。也许这就是解决方案,但也许有人知道我需要做什么。

表单位于域名m.domain.com 并且php文件位于domain.com

3 个答案:

答案 0 :(得分:2)

此外,您必须将header('Access-Control-Allow-Headers: X-Requested-With');添加到服务器端才能正确处理呼叫。

阅读有关CORS和服务器端处理的more here

答案 1 :(得分:2)

所以,我修好了。我将我的文件从根目录复制到我的移动根目录,然后通过真正的根目录进行包含。它现在有效。我尝试了其他评论,但那些也不起作用。

感谢大家的快速回复!

答案 2 :(得分:0)

我认为你需要告诉jQuery在XHR2中使用CORS客户端支持:

$('#create').submit(function() {
    $.ajax({ 
        data: $(this).serialize(),
        type: $(this).attr('method'), 
        url: $(this).attr('action'), 
        xhrFields: { withCredentials: true },
        crossDomain: true,
        success: function(response) {
            console.log(response);
        }
    });
    return false;
});