Синхронизация таймера обратного отсчета

ast-ross

Новичок
Синхронизация таймера обратного отсчета

Здравстуйте! Очень нужна ваша помощь!!!

В общем пишиться некий интерфейс к БД. Реализованны функции автоматической блокировки и автоматического завершения сеанса по таймауту.

есть php функции вызываемые через аякс:
iss_lock(); iss_exit(); - отробатывают при достижении таймаута написанного на JS.


Проблема в том, что если открыть любую ссылку в новом окне в разных окнах, будет идти свой таймер. Все бы ничего но вот один из таймеров отработает раньше и вызовет через аякс функцию iss_exit в которой произойдет session_destroy(); А второе окно честно будет вести отчет и показывать окно, хотя все сейсионные переменные уже разрушены.

Посоветуйте как поступить? Как синхронизовать время во всех открытых окнах?
 

BRat

o_0
довольно странная система. Почему время хранится не в БД, а в js скрипте?
 

Линка

Новичок
ast-ross
А почему бы не делать это уровне сервера?
Писать кудато id юзера и время
а потом проверять
если заходит другой юзер и разница между временами меньше какого значения не пускать его.
 

ast-ross

Новичок
Вы вероятно меня не поняли. Таймер мне нужен что бы показывать пользователю что через 10 мин произойдет блокировка работы, т.е. если он ничего не предпринимает то через 10 минут его выбросить к форме авторизации где его логин подставлен в соответствующее поле, надо ввести только пароль, после чего если он не активен еще 10 минут происходит автоматическое завершение севанса т.е. убиваеться сессия... То же самое можно произвести просто нажав кнопочки "блокировка", "завершение сеанса"...
 

BRat

o_0
ast-ross
тебя прекрасно поняли - храни время в БД, периодически запрашивай его ajax ом

ну и обновляй соответсвенно
 

ast-ross

Новичок
Автор оригинала: BRat
довольно странная система. Почему время хранится не в БД, а в js скрипте?
Время нигде не храниться по событию onLoad запускаеться JS функция iss_timer(600)
которая приняв сколько ей считать начинает рекурсивно вызывать себя (setTimeout(seconds--,1000);) пока seconds не дойдет до 0, ну а там в зависимости или лочиться или завершаеться сеанс...

-~{}~ 14.03.07 18:44:

ну и будут у меня при 10 открытых окнах у каждого узера по 10 пакетов раз в 1 секунду ходить?
 

BRat

o_0
ast-ross
ну и будут, что здесь такого? сделай не раз в секунду, а раз в минуту, полминуты.. кроме секунд ведь другие единицы измерения времени есть
 

ast-ross

Новичок
И у кого приоритет будет на изменения данных в БД? Если каждая из порадженных функций будет писать в БД произойдет следующее, канал штука переменчивая первый пакет улетит за 1 секунду а с другого окна за 2 секунды. Т.е. пойдет коллизия. Если дать возможность только одной из них писать а всем остальным читать юзер может прибить именно мастера...
 

BRat

o_0
ast-ross
а вот это уже твои проблемы Если тебе нужно написать решение - это в топик Работа. Общие черты тебе были сказаны, дальше думай сам.
 

ast-ross

Новичок
Автор оригинала: BRat
раз в минуту, полминуты.. кроме секунд ведь другие единицы измерения времени есть
По тех заданию должен быть таймер в левом верхнем углу показывающий сколько осталось в формате HH:MM:SS

-~{}~ 14.03.07 18:53:

Автор оригинала: BRat
ast-ross
а вот это уже твои проблемы Если тебе нужно написать решение - это в топик Работа. Общие черты тебе были сказаны, дальше думай сам.
Я прошу чисто теоретической помощи, а то что Вы написали работать не будет все будет жутко глючить...
 

BRat

o_0
ast-ross
причем здесь твое ТЗ? не нужно делать секундомер на ajax. Нужно лишь запросить время, и делать с ним в JS всё что угодно, прибавляй секунды, убавляй. И периодически синхронизировать с сервером
 

ast-ross

Новичок
либо пользователь прибъет мастер-а который ведет отсчет в бд, а по другому если все пишут то будет хаос... Так как пакеты от них будут идти с разным интервало и достигать сервера будут асинхронно...
 

ksnk

прохожий
ast-ross
Выводи как и раньше счетчик Javascript'ом, но иногда (раз в минуту) "уточняй" его у сервера аяксом.
Есть еще кука - как средство хранения информации
 

ast-ross

Новичок
ну если у сервака уточнять знчит должен среди всех этих окон быть мастер (тот что ведет отсчет) его может убить пользователь, либо вызывать в фоновом режиме отдельный скрипт отсчета он и будет писать в БД а остальные из БД синхронизируються... До этого я уже давно допер но этот способ корявый...
 

BRat

o_0
ast-ross
какой еще мастер? все окна равноправны

ты до сих пор не понял, что нельзя никакую инфу из JS писать в свою БД? ВСЕ обновления только с участиям данных со стороны сервера
 

ast-ross

Новичок
Автор оригинала: BRat
ast-ross
какой еще мастер? все окна равноправны

ты до сих пор не понял, что нельзя никакую инфу из JS писать в свою БД? ВСЕ обновления только с участиям данных со стороны сервера
Мастером можно сделать любое из окон только оно будет работать через аякс на запись данных в БД, остальные читать...

Синхронизвать можно и без участия сервера через куки но этот вариант может не отработать если оные отключены. Из JS в БД можно писать хоть что через аякс...
 

BRat

o_0
ast-ross
слух, у тебя не тот уровень чтобы спорить.

если не умеешь время на стороне сервера определять - конечно, только JS скриптом
 

ast-ross

Новичок
В том то вся и проблема если они все равноправны то через несколько секунд произойдет наложение, так как данные от окон через аякс на сервер поступят 100% не синхронно...

-~{}~ 14.03.07 19:12:

Вы знаете мой уровень или определяете его по надписи под ником?
 

ast-ross

Новичок
Ну если Вы такой крутой программист поясните что помешает съехать таймеру при Вашем подходе? Если ничего разумного посоветовать не можете, то не захламляйте тему.
 
Сверху