防止会话到期?

时间:2012-04-06 09:24:00

标签: image cookies session-cookies php

我们办公室有一个简单的闭路电视系统,可以显示每个安全摄像头的实时图像。 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。如果没有人在周末观看内联网,我需要这个工作。

这个项目是这样的,我们可以在我们的内部网上放置几个实时(当页面刷新!)图像,这样我们就不必连续进入闭路电视系统,登录并找到合适的相机看谁在车库门等。

任何帮助都将不胜感激。

3 个答案:

答案 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/...">),您可能会这样工作:

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

否则,如果您无法指定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=。它通常被认为是安全方面的不良做法我相信(this article解释了它如何用于XSS),因为你在URL中公开了用户信息,尽管我认为这对此几乎没有影响情况下

3根据the XMLHttpRequest spec of the send() method

  

如果用户代理支持HTTP状态管理,则应该保留,丢弃并发送cookie