2

私たちのオフィスには、各防犯カメラからのライブ画像を表​​示するシンプルなCCTVシステムがあります。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列とSecure列もありますが、どちらも空です。

私が理解しようとしているのは、そのCookieを存続させる方法、または同じ値で再作成するようにトリガーする方法です。システムにログインするためのrakeタスクは、毎回セッションIDをリセットするため、機能しないと思います。

イントラネットはRailsアプリケーションであるため、1つの方法は、ログインして現在のセッションIDをデータベースに保存し、最後に記録されたセッションIDをデータベースからIMGリンクに配置するスクリプトを作成することです。それは少し長い道のりですが、私はより良い解決策を望んでいます。

AJAXでこれを行う方法を示すいくつかの記事を読みましたが、それは常に表示されているイントラネットに依存しているように見えます。週末に誰もイントラネットを閲覧していなかった場合、これが機能する必要があります。

このプロジェクトは、イントラネットに2、3のライブ(ページが更新されたとき!)の画像を配置できるようにするためです。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が古くなることはないと思います。1HTTPCookie:リクエストヘッダーで を指定するようにしてください。URLを介してSIDを指定するだけでは、実際に使用していることをサーバーに示すのに十分ではない可能性があります。2

Webページが画像を直接フェッチしている場合(つまり<img src="http://192.168.1.6/...">、HTMLページにが含まれている場合)、次のように動作する可能性があります。

  • XMLHttpRequestセッションIDを返すURLに対してAJAXリクエスト( )を行います。
  • そのページのサーバーへの後続のリクエストでは、ヘッダーにセッションが自動的に含まれる必要があります。3

それ以外の場合、Cookie:ヘッダーを指定できない場合は、セッションが古くなるまでの時間を長くすることを選択できます。192.168.1.6PHPインターフェイス( ) をホストしているコンピューターにアクセスできる場合は、そのようにPHPを構成できます(php.ini構成ファイルを使用して)。セッション構成に関する情報はここにあり、特にgc-maxlifetimeオプションは便利なようです。

session.gc_maxlifetimeデータが「ガベージ」と見なされ、クリーンアップされる可能性があるまでの秒数を指定します。ガベージコレクションは、セッションの開始時に発生する可能性があります(session.gc_probabilityおよびによって異なりsession.gc_divisorます)。

または、上記のいずれにも魅力がない場合はGET、ページをフェッチ()して有効で新しいセッションIDを取得するソリューションは論理的で適切なようです。これを最適化するには、セッションIDが古くなるまでにかかる時間を測定し、その間隔でのみ新しいセッションIDをフェッチします。

1これの有効なリファレンスを探しましたが、見つかりませんでした。

2具体的には、PHPはPHPSESSID=URLでトークンを使用しますが、あなたの例ではのように見えますsid=。また、URLでユーザー情報を公開しているため、セキュリティ面でも一般的に悪い習慣と見なされています(この記事では、XSSでの使用方法について説明しています)。ただし、この場合、これはほとんどまたはまったく効果がないと思います。

3メソッドのXMLHttpRequest仕様にsend()よると:

ユーザーエージェントがHTTP状態管理をサポートしている場合は、Cookieを保持、破棄、送信する必要があります

于 2012-04-14T20:24:54.547 に答える