2017-06-03 87 views
1

這有點奇怪。好吧,我正在使用一個會話來了解用戶何時登錄。當用戶登錄會話時會被創建。PHP會話只適用於某些頁面

我遇到的問題是會話不能在某些頁面上工作。當我在我的索引頁上執行var_dump($_SESSION['u_up']);時,它顯示會話:array(1) { ["u_up"]=> string(7) "example" },但是當我對另一個腳本進行Ajax調用並執行相同的操作時var_dump($_SESSION['u_up']);它將返回一個空數組:array(0){}

有誰知道爲什麼會發生這種情況?我在這兩個文件上都有session_start(),但不知怎的,我的第二個腳本不會在我的會話中找到。任何幫助是極大的讚賞!

這是我簡單的Ajax腳本:

//Update to not view tutorial   
$.ajax({ 
    type: "POST", 
    url: 'http://192.168.1.75/php/script.php', 
    success: function(data){ 
     console.log(data); 
    } 
}); 
+0

您的兩個頁面是否位於相同的域/子域? –

+2

你顯示的代碼只是不足以找出解決方案,添加ajax腳本和不工作的php腳本的基本部分 –

+0

請確保你的'php.ini'文件確實有這個:'session.use_cookies = 1'和path設置爲'session_save' – NDFA

回答

0

好了,所以原來我不得不改變url在Ajax請求到本地主機。因此,它結束了看起來像這樣:

//Update to not view tutorial   
$.ajax({ 
    type: "POST", 
    url: 'http://localhost/php/script.php', 
    success: function(data){ 
     console.log(data); 
    } 
}); 

真的不知道爲什麼我必須指定,而不是能夠指定我的電腦的IP localhost

+0

[127.0.0.1和IPv4地址之間的區別](https://superuser.com/questions/897699/what-is-the-difference-between-127-0-0-1-and-my-assigned-ipv4-地址) – Fahmi

2

你正在做一個跨域請求,192.168.1.75本地主機不被認爲是相同的域和不共享的cookie。

出於安全原因,跨域請求不包括cookie。如果你不發送phpsessid cookie,你將無法檢索你的舊php會話,這將使你的會話爲空。

除此之外,我強烈建議您使用相對路徑來避免未來的這些問題。

$.ajax({ 
    type: "POST", 
    url: '/php/script.php', 
    success: function(data){ 
     console.log(data); 
    } 
}); 
相關問題