Динамически меняющаяся временная метка - предложения? - PullRequest
3 голосов
/ 09 августа 2011

Я пишу онлайн-экзаменационный сайт для учебного заведения.Для каждой оценки могут быть установлены временные ограничения, и как только пользователь начинает экзамен, на сервере создается новая временная метка.Проблема в том, что наши школьные компьютеры часто блокируются, и ученики вынуждены перезагружаться, теряя время на экзамены.

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

Ответы [ 3 ]

1 голос
/ 09 августа 2011

Вы можете сохранить временную метку в базе данных, которая связана с его пользователем (я предполагаю, что у них есть логин, если они проводят экзамены) и каждые несколько секунд выполнять ajax-вызов, чтобы проверить, все ли они в сети.

В этой проверке Ajax вы можете обновить базу данных с новой отметкой времени, которая указывает, когда они в последний раз были в сети, поэтому, если компьютер блокируется и им нужно перезагрузить компьютер, вы можете выяснить, сколько времени было потеряно.

0 голосов
/ 09 августа 2011

Хотя я понимаю, что иногда это может быть трудно, единственное действительно надежное решение вашей дилеммы - это надежная сеть.

Но не хватает того, что насчет другого средства связи или пути, который подтверждает состояние клиента? Можете ли вы подтвердить, что контроллер домена может видеть клиента в локальной сети? Если компьютер присутствует, а веб-клиент отсутствует, то это скорее всего ситуация, управляемая пользователем. Может ли что-то (контроллер домена, другое сетевое расположение?) Заметить появление или исчезновение клиента из сети?

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

0 голосов
/ 09 августа 2011

Вы можете сгенерировать уникальный хэш, чтобы сохранить его в файле cookie, например

$cookie = md5( $student_name . $test_start_timestamp . $computer_ip );

, и сохранить всю необходимую информацию в базе данных, например:

INSERT INTO examination
SET student_hash = '$cookie',
test_start = '$test_start_timestamp',
computer_ip = '$computer_ip'

и более поздних (если компьютерперезапуск) вы можете получить всю информацию из базы данных:

SELECT * FROM examination
WHERE student_hash = '$cookie'

таким образом, студент не сможет изменить метку времени

...