繁体   English   中英

$ _SESSION XMLHttpRequest处的变量为空

[英]$_SESSION Variables empty at XMLHttpRequest

在托管人从PHP 4.x升级到PHP 5.4.1之后,我的一个朋友在通过XMLHttpRequest进行$ _SESSION变量访问时遇到了一个大问题(他使用jQuery)。

我希望以下代码片段能说明他的问题:

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了,但是如果通过$ .post()调用了php文件,则$ _SESSION变量都为空,因此仅发出“数组”警报{}”。

托管人支持说一切都很好,他们根本没有更改任何设置,但是我注意到Chrome由于跨域请求而阻止了XMLHttpRequest,并给出了错误消息(也仅在升级到PHP 5.4.1之后才出现):

XMLHttpRequest cannot load. No 'Access-Control-Allow-Origin' header is present.

在每个php的顶部添加Access-Control-Allow-Origin标头可以解决此错误,但主要问题(空的$ _SESSION变量)仍然存在。

任何建议表示赞赏。 提前致谢!

如果收到access-control-allow-origin错误(可以通过添加标头来解决),那么您正在执行跨域请求。 这就是为什么您拥有不同的会话内容的原因:它们是不同的会话!

可以是从一台计算机(域)到另一台计算机(www.one.com到www.two.com),也可以是从一个子域到另一台子域(www.one.com与one.com),也可以是不同的服务(例如,http vs https,这些服务可能由其他计算机或进程提供)。

所有这些东西有一个共同点:您的请求似乎去了另一个地方(因此允许起源)。 另外,不同的地方有不同的会话,因为它们不是共享的。

检查为什么您经常进行访问控制:请求不会发送到同一位置。 因此,使用标头对它进行“修复”仅是对源的修复:删除该“修复”,并发出不需要该请求的请求。 那么您将返回相同的服务器/进程/任何位置,并且将具有相同的会话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM