- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
编辑 我刚刚意识到我在编写缩写代码示例时一定是脑放了一个大屁。看,我正在使用 smarty。因此,我实际上已经在使用 Kips 的解决方案,因为 smarty 在 session 保存后显示
我一直致力于为我正在处理的 PHP 网站实现资源管理器(用于压缩、压缩和缩小 CSS 和 JS),但遇到了一个非常奇怪的问题。因此,当用户导航到 index.php 时,文件将添加到资源管理器对象中,资源管理器对象将它们组合成一个文件,并通过 <script src="resource.php?id=123&ext=.js">
包含在页面中。或 <link href="resource.php?id=123&ext=.css" />
它基本上归结为一个文件路径存储在访问页面的 session 中,并从资源页面的 session 中读取。在 FF 中,这工作得很好。在 IE 和 Chrome 中,它不会。
这是一个简化得多的代码示例:
index.php
<?php
session_start();
//Do a ton of stuff
//Including adding several files to the resource object
//Add the resource links to the head
$smarty->append('headSection','<link href="resource.php?id=<?=$resourceID?>&type=.js" />');
</head>
//Save the resource file which:
// - Outputs the file
// - Saves a reference to it in session
$_SESSION[$resourceID] = $file;
//Let Smarty display
$smarty->display($templateFile);
?>
resource.php
<?php
readfile($_SESSION[$_GET['id']] . $_GET['type']);
?>
在我看来,FF 在对页面所需的资源发出任何新请求之前等待整个页面响应,而 IE 和 Chrome 通过在遇到第二个新请求时启动新请求来运行。因此,这个错误基本上归结为竞争条件。
谁能证实这确实是它的工作方式?如果是这样 - 我将如何解决它?
最佳答案
编辑:在更新您的问题之后,我对您出现竞争条件并不感到惊讶。我不知道为什么它在 Firefox 中工作,但 IE 和 Chrome 肯定不会通过提前请求资源来做任何非法的事情。解决此问题的一种方法是使用输出缓冲。在 index.php 文件的顶部,您可以添加:
ob_start('ob_gzhandler');
这是一石二鸟,方法是:a) 确保缓冲输出,这样浏览器在生成整个页面之前看不到文件; b) 使用 gzip 压缩为您和您的用户节省带宽。
上一个回答:这似乎没有意义。 Cookie 只能在页眉中设置,这发生在加载任何页面内容之前。所以浏览器请求index.php,并且在header中设置了PHPSESSID cookie。然后传递页面内容。
目前我无法访问装有 PHP 的机器,但以下内容可能有助于检验您的理论。 test1.php
设置一个 session 变量,但需要 30 秒才能完全完成加载。同时,test2.php
(一个 CSS 文件)将尝试使用该 session 变量作为文本颜色。如果可以从 test2 读取 session ,文本将显示为红色,否则为黑色(默认颜色)。
test1.php
<?php
session_start();
$_SESSION['mycolor'] = 'red';
?>
<html>
<head>
<link rel="stylesheet" href="test2.php" type="text/css" />
</head>
<body>
Starting test...<br/>
<?php
for($i = 0; $i < 6; $i++) //loop will take 30 seconds to complete
{
echo "$i<br/>\n";
sleep(5);
}
?>
Done!
</body>
</html>
test2.php
<?php
session_start();
?>
body { color: <?php echo $_SESSION['mycolor']; ?>; }
关于php - 为什么在并发打开的页面之间共享 PHP session 似乎在 FF 中有效,但在 IE 或 Chrome 中却无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1533163/
只是想知道是否有可能找出谁从 Windows 共享中读取了文件(最好使用 .NET,但 win32 native 可以)? 我想做的是创建类似 awstats 的东西对于 Windows 共享,这样我
是否可以列出 Intent.ACTION_SEND ?我的意思是我需要知道是否有人通过 action_send 在 Facebook 上分享或在 Twitter 上发推文。 最佳答案 也许你想要一个更
我正在使用 Google Apps 应用程序。实际上,我想在不使用密码的情况下访问另一个 ID。我使用了 OAuth,它运行良好。但我无法分享特定人的日历。我尝试了以下代码。 GoogleOAuthP
我怎样才能只创建模拟器...可能吗?我知道,设备需要分发证书。 最佳答案 您只需将应用程序目录从 iPhone 模拟器复制到另一个实例/操作系统版本,它就应该可以工作。 因此,如果您想分发 3.1.3
我想使用多阶段构建来避免每次构建应用程序时都下载我的 Java 项目所需的所有 Maven 依赖项。 我正在考虑在第一阶段解决 Maven 依赖项,然后在第二阶段构建应用程序,这将需要访问在前一阶段下
我正在寻找保护用户下载内容的初步想法。用户下载充满有趣资源的 zip 文件,这些资源被提取到本地文件系统中以供应用程序使用。我的目标是防止用户通过互联网将下载的资源共享给其他用户(假设他们获得了对文件
我想知道在具有移动和桌面版本的网站上共享身份验证、 session 管理等的最佳方法是什么。我们正在运行 Tomcat,并且更愿意将移动站点和桌面站点的应用程序保持在不同的节点上。 我看过类似的帖子,
我发现了这个单例的实现。我怎样才能创建指向它的指针或共享指针?` 为什么这不起作用?自动测试 = Singleton::Instance(); class Singleton { public: st
我有一个 heroku 项目,我想与其他人分享。作为the instructions describe ,我使用 virtualenv 来管理环境和依赖项。有没有办法在新机器上从 requiremen
Maven 将所有 jar 存储在本地存储库 ~/.m2/repository/ 下。用户多时占用空间大。 那么,是否可以由多个用户共享这个本地存储库,或许在不同的目录结构下? 最佳答案 简单的回答
为什么共享 worker 在重新加载页面时死了?应该是复活了我该如何解决这个问题? 重装前 重新加载后(在example.com上按F5) parent worker var port = new S
我正在开发多个小型应用程序,这些应用程序将共享通用和共享模块和 Assets 。 关于如何创建项目结构的部分在这里回答:https://stackoverflow.com/a/61254557/135
我在 RHEL 上安装了 jenkins (localhost:8080),我能够成功地构建代码 现在,我想设置主/从代理。 我的笔记本电脑将充当“Master Jenkins”,而我同事的笔记本电脑
我有这种方法可以根据我使用的 EXTRA_STREAM 共享文本文件或图片。我有这两个我可以选择 i.putExtra(Intent.EXTRA_STREAM, uri); i.putExtra(In
我正在使用 R 中的一个数据分析项目,我正在使用 R 中的敏感私有(private)数据进行一些逻辑和多级建模。我爱上了 。预订 包,我已经创建了一本关于我们的工作流程和分析管道的相当广泛的书。问题是
我正在构建的应用程序需要在 UITabBarController 框架内为多个 View (及其 subview )显示共享的自定义 UIToolbar。自定义工具栏的内容在所有 View 中都是相同
我有多个应用程序,我想共享相同的 eslint 配置: - project_root/ - app1/ - node_modules/ - eslint.rc
我有多个 Electron 应用程序。一个是主应用程序,其他几个功能应用程序。主应用程序上的按钮很少,这将导致功能应用程序打开。这里的问题是每个应用程序都有一个主进程,该进程导致要利用更多的CPU。是
我正在开发一个 Node.js 后端,它通过 websocket 与一些桌面客户端进行通信,而服务器端的通信是从 Web 前端发起的。一切正常,因为我将 SockJS Connection 实例存储在
我对托管多个网站的服务器上的多个用户帐户使用私有(private) SSH key 和无密码条目。 我为每个用户帐户使用相同的私钥。 (因为我很懒?或者那是“正确”的方式)。 我现在想授权该国不同地区
我是一名优秀的程序员,十分优秀!