2016-09-20 154 views
0

我目前正在开发一个独立的幻灯片应用程序,它显示CSS动画图像以及音乐。加载图像和随机歌曲

到目前为止,图像和音乐只是从他们的真实位置直接加载 - 这意味着该位置和文件必须完全访问公众,任何人都可以直接打开图像和歌曲,而无需使用我的应用程序。这对于原型设计和发布来说没什么问题 - 但现在需要更多的进步保护来防止盗窃。

不要误解我的意思:我知道,没有真正的保护。我只是想让人们很难直接下载。应该没有办法直接链接到媒体文件。

这里是我想出了:

  • 图片和歌曲通过PHP加载 - 您指定的id作为参数,PHP查找的位置,并提供文件,如果找到。此外,只有当作为参数提供的随机数有效(存在且不超过30秒)时才会提供文件。该随机数由PHP生成并存储在$_SESSION['nonce']变量中。

    <img src="image/imageid?nonce=[[nonce]]">
    <audio><source src="song/songid?nonce=[[nonce]]"></audio>

  • 在我的应用程序,我有三个功能:

    • (string) generateNone()生成,会话的保存并返回一个随机数值 - >标记中用来产生链接
    • (bool) validateNonce()用于检查一个随机数是否有效并在之后删除,因此它不能被重用
    • (void) initNonces()用于从会话中删除所有临时值。每次应用程序加载时都会调用此函数(当然,不包括图像和歌曲服务)以防止未使用的随机数累积。

问题:

理论上,这整个想法的作品。实际上,我遇到两个问题,我不能解决:

  1. 图像似乎通过浏览器重新加载:当图像被使用jQuery/JavaScript的改变(例如“隐藏图像1,显示图像2”或“隐藏图像4,显示图像5“),由于nonce不再有效(=已被使用一次),图像无法加载。验证后停止nonce删除(= nonce可重复使用)解决了这个问题,但这不是真正的解决方案。这个问题可能与问题2有关,因为jQuery只改变CSS属性来显示和隐藏图像。

  2. 图片和歌曲现时寿命后装:浏览器似乎加载最初由CSS隐藏只有当图像变得可见的图像。虽然这对减少带宽使用通常是有帮助的,但在我的情况下,它会阻止在30秒的随机生存期后加载图像和歌曲。我需要一种方法让浏览器直接加载所有内容,或者至少在30秒内打开并连接所需的图像/歌曲。

问题:

这是很辛苦,所以我希望有人谁知道如何浏览器内部的工艺介质加载可以给我就如何解决所描述的问题进行提示,以确定真正的问题。如果您需要任何代码,请让我知道。

回答

0

我询问,后来回答只有几分钟的遗憾 - 但我找到了解决办法寻找了几个小时之后,我认为这可能是人谁一起类似的问题来帮助:

我使用jQuery clone()/remove()重新启动图像的CSS动画。我不知道的是,它不仅复制了元素,还重新加载了其中的所有媒体,就像它在原始HTML标记中一样。所以图像被重新加载 - 导致问题,因为nonce已被使用。