2012-05-21 65 views
4

這裏是我做的:jQuery和PHP的AJAX會議

我的登錄表單是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

你已啓用Cookie? –

+0

是的,它已啓用。 – Dikobraz

+0

這是跨域還是在同一個域中? –

回答

0

你永遠不會調用運行Ajax請求的身份驗證,打電話auth.php和設置會話瓦爾。你負載http://server.mysite.com/ajax/loader.php,調用session_start,但你沒有任何時候調用authenticate(),所以你的會話永遠不會被填充。

此外,Access-Control-Allow-Origin尚未得到完全支持,因此根據瀏覽器的不同,它可能會阻止您的跨域請求。

+0

我沒有看到這是跨域。一切似乎都在mysite.com。 –

+0

跨域也跨子域,這是從主mysite.com域調用服務器子域,它將被阻止爲跨域。 Access-Control-Allow-Origin允許跨域但不完全支持。 –

0

我不明白你爲什麼有一個login.html,那裏有ajax執行後,你有這個main.php重定向頁面?我對嗎?如果是這種情況,爲什麼不直接在表單提交後重定向用戶,並讓服務器在呈現頁面之前驗證身份驗證?

現在,如果情況並非如此,請始終提醒您,會話數據在通過ajax設置並在當前頁面中不起作用時,您將調用它。它絕對不會工作。

2

如果所有的域相同的服務器上,在任何地方使用這三條線呼叫之前在session_start

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