2012-04-06 4 views
2

У нас есть простая система видеонаблюдения в нашем офисе, которая показывает живое изображение с каждой из наших камер безопасности. Система CCTV не имеет API или какой-либо метод извлечения живых изображений. Однако вы можете просмотреть изображение из другого браузера, создав базовую HTML-страницу с ссылкой изображения:Предотвращение окончания сеанса?

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

Это отлично работает, пока сессия не истечет и/или timesout. Я не очень много знаю о печенье и сессиях, но когда я проверил страницу в Google Chrome я заметил следующее печенье:

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

есть также столбец HTTP и Secure колонка, но оба они пусты.

Что я пытаюсь выяснить, как сохранить этот куки-файл в живых или вызвать его для воссоздания с одинаковым значением? Я предполагаю, что задача рейка для входа в систему не будет работать, потому что каждый раз будет сбрасывать идентификатор сеанса.

Интранет - приложение Rails, поэтому одним из способов было бы создание сценария, который регистрирует и сохраняет текущий идентификатор сеанса в базе данных, а затем помещает последний записанный идентификатор сеанса в ссылки IMG из базы данных. Это немного длинный путь, но я надеюсь на лучшее решение.

Я прочитал несколько articles, где показано, как это сделать с помощью AJAX, но это, похоже, будет постоянно полагаться на внутреннюю сеть. Мне нужно, чтобы это работало, если никто не просмотрел интрасеть на выходные.

Этот проект позволяет помещать пару живых (когда страница обновляет!) Изображения в нашей интрасети, поэтому нам не нужно постоянно идти в систему видеонаблюдения, войдите в систему и найдите нужную камеру, чтобы увидеть который находится у двери гаража и т. д.

Любая помощь будет оценена по достоинству.

+0

Истекает = Session означает, что сессия истекает при закрытии браузера. Вы должны изменить параметры session.cookie_lifetime и session.gc_maxlifetime в php.ini. – strkol

+0

Что делать, если я не могу редактировать файлы на сервере CCTV? – dannymcc

+0

@dannymcc, за исключением некоторых «взломов», вы ничего не можете с этим поделать! – Yahia

ответ

3

Это немного взломанный, но я сделал небольшой скрипт, чтобы вытащить последний идентификатор сеанса, а затем поместить его в ссылки на изображение.

0

Случайный другой подход: имеет ли следующий URL-адрес правильный образ, не беспокоясь о идентификаторе сеанса?

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

Не работает, к сожалению. – dannymcc

+0

Достаточно честный. (Некоторые сайты помещают SID в URL-адрес, но на самом деле не нуждаются в нем, поэтому я обычно стараюсь, просто чтобы проверить ...) – Stobor

0

Идентификатор сеанса, используемый в файле cookie, по-видимому, является сгенерированным PHP.

Я не думаю, что идентификатор сеанса должен быть устаревшим, если вы «уведомляете» сервер, что вы все еще в сети. Вы должны попытаться указать Cookie: в заголовках HTTP-запроса. Задать SID через URL-адрес, вероятно, недостаточно, чтобы указать серверу, который вы на самом деле используете.

Если ваши веб-страницы извлечения изображений непосредственно (то есть у вас есть <img src="http://192.168.1.6/..."> на странице HTML) вы могли бы работать так:

  • сделать запрос AJAX (XMLHttpRequest) к URL который возвращает идентификатор сеанса.
  • любой последующий запрос на сервер на этой странице должен автоматически включать сеанс в заголовки.

В противном случае, если вы не можете указать Cookie: заголовок, вы можете выбрать, чтобы время перед сеансом становится несвежим больше. Если у вас есть доступ к компьютеру, на котором размещен интерфейс PHP (192.168.1.6), вы можете настроить PHP для этого (через конфигурационный файл php.ini, я считаю). Информация о конфигурации сеанса доступен here, а конкретно gc-maxlifetime варианты кажется полезной:

session.gc_maxlifetime определяет количество секунд, после чего данные будут рассматриваться как «мусор» и потенциально очищены. Сбор мусора может произойти во время начала сеанса (в зависимости от session.gc_probability и session.gc_divisor).

В качестве альтернативы, если ни один из выше обращения к вам, ваше решение не принести (GET) страницу, чтобы получить действительный, свежий идентификатор сеанса кажется логичным и хорошо. Вы можете оптимизировать это, измерив, сколько времени потребуется, прежде чем идентификаторы сеанса станут устаревшими и получат новые идентификаторы сеанса только на этом интервале.

1 Я искал действительную ссылку для этого, но не смог найти.

2 конкретно PHP использует маркер PHPSESSID= в URL, тогда как в вашем примере это выглядит как sid=. Это также считается ошибочной практикой, я полагаю, что (this article объясняет, как это может быть использовано для XSS), поскольку вы публикуете информацию о пользователе в URL-адресе, хотя я думаю, что это не имеет никакого эффекта в этом случае.

3 согласно the XMLHttpRequest spec of the send() method:

Если пользовательский агент поддерживает HTTP State Management оно должно сохраняться, выбросить и отправить печенье

Смежные вопросы