2

我们办公室里有一个简单的闭路电视系统,可以显示我们每个安全摄像头的实时图像。CCTV 系统没有 API 或任何提取实时图像的方法。但是,您可以通过创建带有图像链接的基本 HTML 页面从另一个浏览器查看图像:

http://192.168.1.6/media/getimage_sid.php?sid=a09c4ecb72bade3802e7bf563b0d0bd6&card=1&camera=1&width=384&height=288

这非常有效,直到会话过期和/或超时。我不太了解 cookie 和会话,但是当我在谷歌浏览器中检查页面时,我注意到以下 cookie:

Name       Value                             Domain       Path   Expires   Size
PHPSESSID  a09c4ecb72bade3802e7bf563b0d0bd6  192.168.1.6  /      Session   41

还有一个 HTTP 列和一个 Secure 列,但都是空的。

我想弄清楚的是,如何使该 cookie 保持活动状态或触发它以相同的值重新创建?我假设登录系统的 rake 任务不起作用,因为这会每次都重置会话 ID。

Intranet 是一个 Rails 应用程序,因此一种方法是创建一个脚本,登录并将当前会话 ID 存储到数据库中,然后将最后记录的会话 ID 从数据库中放入 IMG 链接中。虽然有点远,但我希望有更好的解决方案。

我已经阅读了几篇文章,展示了如何使用 AJAX 执行此操作,但这似乎依赖于一直在查看的 Intranet。如果周末没有人查看 Intranet,我需要它来工作。

这个项目是为了让我们可以在我们的 Intranet 上放几个实时(当页面刷新时!)图像,这样我们就不必不断去 CCTV 系统,登录并找到合适的摄像头来查看谁在车库门等

任何帮助,将不胜感激。

4

3 回答 3

3

这有点小技巧,但我制作了一个小脚本来提取最新的会话 ID,然后将其放入图像链接中。

于 2012-04-08T22:30:03.460 回答
0

一种随机的不同方法:以下 URL 是否获得了正确的图像,而不必担心会话 ID?

 http://192.168.1.6/media/getimage_sid.php?card=1&camera=1&width=384&height=288
于 2012-04-14T17:56:35.377 回答
0

cookie 中使用的会话 ID 似乎是 PHP 生成的。

如果您“通知”服务器您仍然在线,我认为会话 ID 不会过时。1 您应该尝试Cookie:在 HTTP 请求标头中指定。通过 URL 指定 SID 可能不足以向服务器表明您实际在使用它。2

如果您的网页直接获取图像(即您<img src="http://192.168.1.6/...">在 HTML 页面中有一个),您可能会像这样工作:

  • XMLHttpRequest向返回会话 ID 的 URL发出 AJAX 请求 ( )。
  • 该页面上对服务器的任何后续请求都应自动将会话包含在标头中。3

否则,如果您无法指定Cookie:标头,则可以选择延长会话过时之前的时间。如果您可以访问托管 PHP 接口 ( 192.168.1.6) 的计算机,那么您可以配置 PHP 来执行此操作( php.ini我相信通过配置文件)。有关会话配置的信息可在此处获得,特别是这些gc-maxlifetime选项似乎很有用:

session.gc_maxlifetime指定数据将被视为“垃圾”并可能被清理的秒数。垃圾收集可能会在会话开始期间发生(取决于session.gc_probabilitysession.gc_divisor)。

或者,如果上述方法都不吸引您,那么您通过获取 ( GET) 页面来获取有效的新会话 ID 的解决方案似乎合乎逻辑且很好。您可以通过测量会话 ID 过时需要多长时间并仅在该时间间隔获取新的会话 ID 来优化这一点。

1 我为此寻找有效的参考,但找不到。

2 特别是 PHPPHPSESSID=在 URL 中使用了一个标记,而在您的示例中它看起来像sid=. 我认为,从安全角度来看,它通常也被认为是不好的做法(本文解释了它如何用于 XSS),因为您在 URL 中公开了用户信息,尽管我认为这在这种情况下几乎没有影响

3 根据方法XMLHttpRequest 规范send()

如果用户代理支持 HTTP 状态管理,它应该保持、丢弃和发送 cookie

于 2012-04-14T20:24:54.547 回答