我们办公室有一个简单的闭路电视系统,可以显示每个安全摄像头的实时图像。 CCTV系统没有API或任何提取实时图像的方法。但是,您可以通过使用图像链接创建基本HTML页面来查看其他浏览器中的图像:
http://192.168.1.6/media/getimage_sid.php?sid=a09c4ecb72bade3802e7bf563b0d0bd6&card=1&camera=1&width=384&height=288
这非常有效,直到会话到期和/或超时。我不太了解Cookie和会话但是当我在Google Chrome浏览器中查看该页面时,我发现了以下Cookie:
Name Value Domain Path Expires Size
PHPSESSID a09c4ecb72bade3802e7bf563b0d0bd6 192.168.1.6 / Session 41
还有一个HTTP列和一个安全列,但两者都是空的。
我想弄清楚的是,如何保持cookie活着或触发它以相同的值重新创建?我假设登录系统的rake任务无法正常工作,因为每次都会重置会话ID。
Intranet是一个Rails应用程序,因此一种方法是创建一个登录脚本并将当前会话ID存储到数据库中,然后将最后记录的会话ID放入数据库的IMG链接中。虽然这有点长的路要走,但我希望有更好的解决方案。
我已经阅读了一些显示如何使用AJAX执行此操作的articles,但这似乎依赖于一直在查看Intranet。如果没有人在周末观看内联网,我需要这个工作。
这个项目是这样的,我们可以在我们的内部网上放置几个实时(当页面刷新!)图像,这样我们就不必连续进入闭路电视系统,登录并找到合适的相机看谁在车库门等。
任何帮助都将不胜感激。
答案 0 :(得分:3)
这是一个黑客攻击,但我已经制作了一个小脚本来提取最新的会话ID,然后将其放入图像链接。
答案 1 :(得分:0)
一种随机的不同方法:以下网址是否能够获得正确的图像,而不必担心会话ID?
http://192.168.1.6/media/getimage_sid.php?card=1&camera=1&width=384&height=288
答案 2 :(得分:0)
cookie中使用的会话ID似乎是PHP生成的会话ID。
如果您“通知”服务器您仍然在线,我认为会话ID不应该过时。 1 您应该尝试在HTTP请求中指定Cookie:
头。通过URL指定SID可能不足以向服务器指示您实际使用它。 2
如果您的网页直接获取图片(即HTML页面中有<img src="http://192.168.1.6/...">
),您可能会这样工作:
XMLHttpRequest
)。否则,如果您无法指定Cookie:
标题,则可以选择在会话变得陈旧之前制作时间。如果您可以访问托管PHP接口的计算机(192.168.1.6
),那么您可以配置PHP来执行此操作(我相信通过php.ini
配置文件)。有关会话配置的信息可用here,特别是gc-maxlifetime
选项似乎很有用:
session.gc_maxlifetime
指定数据被视为“垃圾”并可能被清除的秒数。会话开始时可能会收集垃圾(取决于session.gc_probability
和session.gc_divisor
)。
或者,如果以上都不适合您,那么获取(GET
)页面以获取有效的新会话ID的解决方案似乎合乎逻辑且良好。您可以通过测量会话ID变为陈旧之前所需的时间以及仅在该时间间隔内获取新会话ID来对此进行优化。
1我找了一个有效的参考资料,但找不到。
2具体而言,PHP在URL中使用PHPSESSID=
标记,而在您的示例中,它看起来像sid=
。它通常被认为是安全方面的不良做法我相信(this article解释了它如何用于XSS),因为你在URL中公开了用户信息,尽管我认为这对此几乎没有影响情况下
3根据the XMLHttpRequest spec of the send()
method:
如果用户代理支持HTTP状态管理,则应该保留,丢弃并发送cookie