繁体   English   中英

用Javascript存储大Cookie。

[英]Storing large Cookies in Javascript.. How to

为了简化问题,我将假装自己的网站是这样的:我有一个Javascript数据数组,几乎在我网站的每个页面上都使用该数据。 我使用PHP在每个页面上打印此javascript数组。 现在,该阵列已增长到约0.5MB,因此,它正滞后于您所能想象的系统。 最简单的选择是将某些内容放入缓存中,因此不需要每次都打印该数组,但是,当用户浏览不同的页面时,存储值的数组会不时更新。

我最初的想法是使用javascript cookie来存储信息,也许只是做一个快速的PHP来检查数组是否已更改,如果删除了旧的cookie并将更新的数组下载到该cookie中。 但是,我被认为是cookie有大小限制。

有人对这个方法有什么建议吗?

谢谢您的帮助!

Cookie会根据每个 Web请求( 每个 html页面, 每个图像, 每个 css文件等)发送到您的服务器。 让用户在每个Web请求上上传1/2 mb的数据是疯狂的。 出于这个原因,Cookie应该极小。

您不需要任何异国情调的东西。

有一个PHP脚本输出必要的数据。 让它发送http标头,向浏览器建议它可以长时间缓存请求。 要强制它更新数据(更改时),请通过更改查询字符串参数来更改脚本src的url。 由于网址已更改,因此如果浏览器从未请求过该网址,则浏览器必须请求该文件。 使用顺序编号方案以确保唯一性。

例如,1234是最新的修订号

<script src="js-data.php?version=1234"></script>

JS-data.php

<?php
header("cache-control: max-age=1000000");
header("content-type: application/javascript");
echo 'var data = {...}';

或者,不更改版本号,而是使js-data.php脚本支持有条件的http请求,正是出于这个原因而设计的。 您可以在http://www.mnot.net/cache_docs/上阅读有关http标头以及如何解决新鲜度的问题

尽管前一种方法效率更高,因为浏览器无需向网络服务器发出额外的http请求以保持新鲜度,而第二种方法的好处是您无需添加带有输出逻辑的php代码。您所有html页面的最新修订号。 所有逻辑都包含在js-data.php脚本中。 这更容易管理和使用。

我将以以下方式解决此问题。
编写一个php文件,该文件将在数组中返回一个javascript内容。 在该文件中,您应该检测是否有一些更改,以便需要更新阵列。 如果应该更新数组,则返回内容,否则返回http状态304,这表示未修改资源

php文件的内容应如下所示:script.php

<?php
$nochanges = TRUE;

//Detect if changes are required

if($nochanges)
{
  http_send_status (304);
} 
else
{
?>
<script>
  myarray=[1,2,3];
<script>

HTML内容

PS:对不起,我没有使用php,所以我真的不知道如何正确地做。

您可以使用WebStorage来做到这一点。 这仅限于非常现代的浏览器,但不一定是最先进的浏览器。 参见此处: Wikipedia WebStorage

暂无
暂无

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

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