我在登录子域上设置会话变量,如果登录成功则从另一个子域响应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!';
}
感谢您的帮助。
答案 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上的会话的可行解决方案
我希望这对你有所帮助。