jquery and php ajax sessions


jquery and php ajax sessions

这是我所做的:

我的登录表单在 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

这是主要.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美元的空。

session_start();必须是产生任何输出的第一件事。你把它放在你header()的东西下面。它需要先走。

请参阅此处的第一个注释:http://www.php.net/manual/en/function.session-start.php

如果所有域都在同一台服务器上,请在调用 session_start 之前在所有位置使用这三行

$session_name = session_name("somename");
ini_set('session.cookie_domain', '.mysite.com');
ini_set('session.save_path', 'C:'tmp');
session_start();

您永远不会调用运行 ajax 请求的身份验证,以调用 auth.php并设置会话变量。 您 .load http://server.mysite.com/ajax/loader.php 调用session_start,但您绝不会调用 authenticate((,因此您的会话永远不会被填满。

此外,尚

不完全支持访问控制允许源,因此根据浏览器的不同,它可能会阻止您的跨域请求。

我不明白你为什么有登录名.html在ajax执行之后,你有这个主要的.php重定向页面?我说的对吗?如果是这种情况,为什么不在表单提交后简单地重定向用户,并让服务器在呈现页面之前验证身份验证?

现在,如果不是这种情况,请始终提醒会话数据在通过 ajax 设置会话数据时不会生效,并且在当前页面中,您将调用它。这绝对行不通。