2012-04-06 93 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