首先,如果我的问题标题不正确或不清楚,我道歉。但我会在下面解释我的问题。
假设我有一个名为mywebapp.com
的网络应用程序,我有一个页面loadjs.php
。在这里,我有一些JS代码,文件的内容时间是application/javascript
。
header("content-type: application/javascript")
echo "alert('some message here');";
我将在另一个网络应用的页面(index.html
)中使用上述文件作为javascript源。我们说它是anotherwebapp.com
。
index.html
(anotherwebapp.com)<html>
<head>
<script type="text/javascript" src="//mywebapp.com/loadjs.php"></script>
</head>
<body>
Some contenct here..
</body>
</html>
当这个运行时,应该有我在loadjs.php
(mywebapp.com)中写的javascript警报。
以上工作没有任何问题。
让我们假设现在我只想为mywebapp.com的登录用户显示此alret。这意味着,当已经登录mywebapp.com的用户在同一浏览器中访问anotherwebapp.com时会看到提醒。
所以我的loadjs.php文件如下所示。
header("content-type: application/javascript")
if(isset($_SESSION['logged_in']) && $_SESSION['logged_in']==true)
echo "alert('some message here');";
假设用户登录后已设置$_SESSION['logged_in']
。
它在Firefox和IE中正常运行。但..
原因是,chrome无法像其他浏览器那样读取会话值。
(请注意,上面的编码示例只是解释我的问题的一个例子。)
期待收到你的来信。
答案 0 :(得分:1)
会话是在服务器端处理的,因此这不是Chrome问题。
这可能是一个缓存问题:js文件首先加载而没有警报(因为用户没有登录)但是当用户登录时,js是从缓存加载而不是再次下载导致警报不显示
Chrome有一个非常好的&#34;积极的&#34;缓存策略,之前有过这样的麻烦。
您应该尝试添加时间戳或某种虚拟值,以便在每个页面重新加载时强制重新下载javascript文件
<head>
<script type="text/javascript" src="//mywebapp.com/loadjs.php?dummy=
<? echo time() ?>"></script>
</head>
我还没有使用过很长时间的PHP,所以这可能不起作用,但你应该明白这个想法
答案 1 :(得分:1)
这是一个有趣的问题。我现在没有可以测试的环境,但我想要做的第一件事就是在使用FF,然后使用Chrome进行请求时打印$_SESSION['logged_in']
。如果Chrome的值为false,则必须调试原因。这可能是一个跨域政策问题。
您可以看一下:https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS
也许您需要从mywebapp.com发送此标头:
Access-Control-Allow-Origin: http://anotherwebapp.com
如果Chrome的js控制台显示任何错误,请同时分享。
更新:问题是由于拨打的Chrome浏览器Cookie设置具有限制性。转到chrome://settings/content
并确保未选中Block third-party cookies and site data
。
答案 2 :(得分:0)
我有类似的问题。
您遇到问题的原因是: 会话ID作为cookie发送,由于您的请求是跨域的,因此浏览器将其视为第三方cookie。有几种浏览器会阻止第三方cookie。
问题的解决方案 在客户端(在浏览器中)生成会话ID,使用Javascript sessionStorage存储会话ID,然后将每个请求的会话ID发送到服务器。
本文中的详细信息(与XMLHttpRequest相关,但您的问题基本相同):Javascript Cross-Domain Request With Session