2012-04-06 89 views
2

我们在办公室有一个简单的闭路电视系统,可以显示来自我们每个安全摄像机的实时图像。闭路电视系统没有API或任何提取实时图像的方法。但是,您可以通过与图像链接创建一个基本的HTML页面查看其他浏览器的图像:防止会话过期?

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

这完美的作品,直到会话过期和/或timesout。我不十分了解cookie和session但是当我检查的页面在谷歌浏览器,我注意到下面的cookie:

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

还有一个HTTP柱和安全列,但都是空的。

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

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

我已阅读了几个articles显示如何使用AJAX做到这一点,但这似乎依赖于始终查看的Intranet。如果没有人在周末查看内部网,我需要这个工作。

这个项目是我们可以在我们的内联网上放置一对现场(当页面刷新!)图像,所以我们不必连续去CCTV系统,登录并找到正确的相机只是为了看谁在车库门等

任何帮助,将不胜感激。

+0

过期=会话意味着,当你关闭浏览器会话将到期。您必须在php.ini中更改session.cookie_lifetime和session.gc_maxlifetime参数。 – strkol 2012-04-07 11:54:10

+0

如果我无法编辑CCTV服务器上的文件,该怎么办? – dannymcc 2012-04-07 11:58:57

+0

@dannymcc除了一些“黑客”之外,你无能为力! – Yahia 2012-04-08 12:27:16

回答

3

这是一个黑客,但我已经做了一个小脚本拉入最新的会话ID,然后把它放入图像链接。

0

一个随机的不同方法:下面的URL是否得到正确的图像,而不必担心会话ID?

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

不幸的是没有工作。 – dannymcc 2012-04-15 19:57:08

+0

够公平的。 (有些网站将SID放入网址中,但实际上并不需要它,所以这是我通常尝试的,只是为了检查...) – Stobor 2012-04-15 23:23:04

0

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

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

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

  • ,从AJAX请求(XMLHttpRequest)的网址它返回一个会话ID。
  • 对该页面上的服务器的任何后续请求都应自动在会话头中包含该会话。

否则,如果您不能指定Cookie:头,你可以选择让时间之前会话变得陈旧更长。如果您有权访问托管PHP界面的计算机(192.168.1.6),那么您可以配置PHP来执行此操作(我相信通过php.ini配置文件)。关于会话配置信息可用here,并且具体地gc-maxlifetime选项似乎有用:

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

另外,如果以上都不是吸引你的,你的解决方案来获取(GET)页面以获得有效的,新的会话ID似乎是合乎逻辑和良好的。您可以通过测量在会话ID变为陈旧之前需要多长时间并仅在该间隔获取新会话ID来优化这一点。

1我找了一个有效的参考,但找不到一个。

2具体而言,PHP在URL中使用一个PHPSESSID=令牌,而在您的示例中它看起来像sid=。由于您在URL中公开了用户信息,因此我认为这通常被认为是安全方面不好的做法,我相信(this article解释了它可能用于XSS),但我认为这在这种情况下几乎没有影响

根据 the XMLHttpRequest spec of the send() method

3:

如果用户代理支持HTTP状态管理应该坚持,放弃和发送cookie