PHP会话的JavaScript重定向问题

时间:2011-08-04 16:08:26

标签: php javascript session redirect

我在登录子域上设置会话变量,如果登录成功则从另一个子域响应json,脚本检查响应的json,脚本执行location.href = "new url"。在重定向的网站“新网址”我想检查我的会话变量,如果用户登录或没有,但没有设置会话变量。 location.href = ""会破坏我的会话吗?如何解决这个问题? session.cookie_domain设置为'.mydomain.com'

login.mydomain.com:

$.post('http://api.mydomain.com/index.php', {action: 'login', username: username, password: password}, function(response) {
            var success = $.parseJSON(response);
            if(success.success == 'true') {
                location.replace = 'http://my.mydomain.com';
            }
        });

api.mydomain.com:

session_start();
$_SESSION['active'] = true;
header('Access-Control-Allow-Origin: http://login.mydomain.com');
echo '{"success": "true"}';

my.mydomain.com:

session_start();
if(!isset($_SESSION['active']) && !$_SESSION['active']) {
    header("Location: http://login.mydomain.com");
    echo $_SESSION['access_token'].' test';
}
else {   
    echo 'Success!'; 
}

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,当我使用相对url(location.ref =“index.php”)时,我发现所有会话变量都存在。但是当我使用绝对URL(location.ref =“http://mydomain.com/index.php”)时,它会杀死我所有的会话变量。

答案 1 :(得分:1)

您似乎没有在第二个代码块中调用session_start()

答案 2 :(得分:0)

根据您的说法,您可能会遇到一些导致此问题的问题。

1)PHP cookie是由服务器在加载页面时设置的,没有页面加载意味着没有设置cookie,如果你使用的是没有页面加载的纯JSON,那么你可能无法设置会话并返回它到浏览器。

2)还要记住PHP会话实际上是一个cookie并且cookie的规则适用,所以如果你在api.mydomain.com上设置一个PHP会话并期望它在my.mydomain.com上运行它可能不会工作。

您可以找到处理登录数据和多个子域here上的会话的可行解决方案

我希望这对你有所帮助。