Регистриране на дейности: Как да записвам време с помощта на PHP приложение?

Работя с някакъв съществуващ PHP/MySQL код. Регистрирам/проследявам определени дейности в MySQL база данни. Регистрират се определени точки за достъп. Отчита се броят на влизанията на потребител в системата. Но трябва да регистрирам и времето, през което потребителят е влязъл, както и времето, през което потребителят е в определена секция на уеб сайта.

Тъй като PHP е среда без състояние, в по-голямата си част, кой е най-добрият начин за записване на крайната точка(и); или когато потребителят излезе?

Забележка: Не мога да принудя потребителя да излезе, тъй като браузърът може просто да бъде затворен. Може би бих могъл просто да сложа AJAX таймер, който да брои минутите? Ако е така, трябва ли да третирам дейностите и времето на влизане като различни таблици с информация (MySQL)?

Редактиране: Забравих да спомена, че имаме наличен jQuery.


person jjwdesign    schedule 10.11.2011    source източник


Отговори (3)


Както казахте, не можете да принудите потребителя да излезе от системата и не можете да знаете със сигурност дали той разглежда вашата страница или играе флипер.

Решение би било AJAX заявка на всеки, да кажем, 5 минути, за да се каже на приложението ви, че потребителят е активен. За съжаление, ако вашият потребител е заключил екрана си и е отишъл да играе Pinball, вие все още не знаете какво точно прави. Освен това извършването на AJAX заявки на интервали като този ще увеличи натоварването на сървъра, особено в среда с много потребители.

Най-доброто решение според мен е просто да съхраните start_time на потребителя (когато влезе), след това да актуализирате end_time при всяко действие, което прави, и с изчакване на сесията.

Като пример:

  • Влизам в 5:00. Актуализирайте start_time до 5:00.
  • Преглеждам foo.php в 5:01. Актуализирайте end_time до 5:01.
  • Преглеждам bar.php в 5:03. Актуализирайте end_time до 5:03.
  • Отивам да пия кафе в 5:05.
  • Връщам се в 5:15 и сесията ми изтече, трябва да вляза отново.

И така, знаете, че прекарах приблизително 3 минути на вашата кандидатура, тъй като последното действие, което направих, беше в 5:03 (5:03 - 5:00 = 3). Разбира се, не можете да знаете точно дали е било 3 или 5 минути. Но можете да предположите, в повечето случаи така или иначе, че ако не правя нищо по вашето приложение (т.е.: изпълнявам скрипт, извиквам и т.н.), че не го използвам.

Очевидно е още по-добре, ако можете да улавяте събития на JavaScript като затваряне на прозорец, или ако изляза ръчно: актуализирате съответно end_time.

person netcoder    schedule 10.11.2011

Трябва да заснемете две събития.

  1. Събитието onCLose() за страницата и го закачете в ajax извикване обратно към вашата система за регистриране.
  2. Събитието onClick() за вашия бутон за излизане и го закачете в манипулатора за запазване на ajax.

Събитието onClose ще ви позволи да заснемете, когато разделът/браузърът е затворен и събитието onCLick е очевидно.

Сега това няма да улови времена, когато браузърът умира, машината губи захранване и т.н., така че ще има случаи, в които ще имате пропуски и те могат да бъдат коригирани от вашия манипулатор на събития за влизане и просто маркирайте последното събитие за влизане като излизане при следващото Влизам. Това обаче ще доведе до отклонения в проследяването на времето, прекарано в системата, и ще трябва да се справите статистически с тези във вашите отчети.

person FlyingGuy    schedule 10.11.2011

Можете да използвате допълнителен PHP скрипт, който записва последната активност и да го извикате чрез ajax.

Можете да използвате javascript, за да наблюдавате дали потребителят все още е активен (преместил мишката или натиснал клавиш през последните 5 минути и т.н.)

РЕДАКТИРАНЕ: Почти забравих важната част: вашият java скрипт трябва да направи ajax заявка за зловещи X секунди. Така че, ако не е имало заявка за x+tollerance секунди, можете да считате сесията за мъртва.

person Oliver A.    schedule 10.11.2011