以下是我的工作:
我的登录表单位于www.mysite.com/login.html :(子域名www!)
function authenticate(userName, password) {
$.ajax
({
type: "POST",
//the url where you want to sent the userName and password to
url: 'http://server.mysite.com/ajax/auth.php',
dataType: 'json',
async: false,
cache: false,
data: 'vardas='+userName+'&psw='+password,
success: function (data) {
{
window.location.replace('/main.html');
}
}
})
}
这是我的ajax / auth.php:
header('Content-type: application/json');
header ("Access-Control-Allow-Origin: http://www.mysite.com");
header('Expires: ' . gmdate('r', 0));
session_start();
$_SESSION["ok"] = 1111; <- test value
这是main.php:
<script>
$(function() {
$('#home').load('http://server.mysite.com/ajax/loader.php', function() {
})
});
</script>
<div id=home></div>
这是我的ajax / loader.php:)
<?
header ("Access-Control-Allow-Origin: http://www.mysite.com");
header('Expires: ' . gmdate('r', 0));
session_start();
var_dump ($_SESSION); <---- OUTPUT IS (0) EMPTY!! Why ?
?>
为什么这不起作用?我总是将$ _SESSION清空。
答案 0 :(得分:2)
session_start();
必须是产生任何输出的第一件事。你有header()
以下的东西。它需要先行。
请参阅此处的第一条说明:http://www.php.net/manual/en/function.session-start.php
答案 1 :(得分:2)
如果所有域都在同一台服务器上,请在调用session_start
之前到处使用这三行$session_name = session_name("somename");
ini_set('session.cookie_domain', '.mysite.com');
ini_set('session.save_path', 'C:\tmp');
session_start();
答案 2 :(得分:0)
您永远不会调用运行ajax请求的身份验证,调用auth.php并设置会话变量。你.load http://server.mysite.com/ajax/loader.php调用session_start,但是你没有调用authenticate(),所以你的会话永远不会被填充。
此外,尚未完全支持Access-Control-Allow-Origin,因此根据浏览器的不同,它可能会阻止您的跨域请求。
答案 3 :(得分:0)
我不明白为什么你有一个login.html,在ajax执行之后,你有这个main.php重定向页面?我对吗?如果是这种情况,为什么不在表单提交后简单地重定向用户,让服务器在呈现页面之前验证身份验证?
现在,如果不是这种情况,请始终提醒您,当您通过ajax设置会话数据时,会话数据不会生效,您将调用它。它绝对不会起作用。