在主機從PHP 4.x升級到PHP 5.4.1之後,我的一個朋友在通過XMLHttpRequest(他使用jQuery)中訪問$ _SESSION變量時遇到了一個巨大的問題。
我希望他的代碼下面的片段是說明他的問題:
的index.php
<?PHP
session_start();
$_SESSION['chatfenster'] = array();
$_SESSION['user'] = 1;
?>
<!-- HTML Markup -->
<script type="text/javascript" src="../scripts/jquery/js/jquery-1.8.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
setInterval(function() {
$.post("http://www.his-domain.at/ticker_tracker.php", function(feedback) { alert(feedback); })
},
10000);
});
ticker_tracker.php:
<?PHP
session_start();
var_dump($_SESSION);
?>
當他瀏覽到index.php和之後手動到ticker_tracker.php,$ _SESSION變量正確地var_dumped,但如果php文件通過$ .post()調用,$ _SESSION變量都是空的,因此警告強制t「array {}」。
主機支持說一切正常,他們根本沒有更改任何設置,但我注意到由於跨域請求,Chrome會阻止XMLHttpRequest,並提供錯誤消息(也僅在升級到PHP 5.4.1後出現):
XMLHttpRequest cannot load. No 'Access-Control-Allow-Origin' header is present.
添加在每個PHP的最頂端訪問控制允許來源頭解決了這個錯誤,但主要問題(空$ _SESSION變量)仍然存在。
任何意見表示讚賞。提前致謝!
大聲笑...如果你的朋友不能使用這個網站,那麼你是他的好朋友! – Coder
不太清楚,如果我理解你的評論...代碼工作,直到主機更改PHP版本。他根本沒有改變代碼。 –