Как и когда регистрировать доступ к учетной записи с помощью PHP? - PullRequest
0 голосов
/ 02 января 2011

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

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

Но моя проблема в том, когда и как следуетЯ вставляю другую запись в базу данных вместо того, чтобы перезаписывать последнюю?

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

Или есть ли лучший способ?

В идеале, я хотел бы записать "действие выхода из системы", когда браузер был закрыт, но я неНе думаете, что есть способ обнаружить это?

Предложения?

Ответы [ 3 ]

2 голосов
/ 03 января 2011

Настоящая проблема здесь в другом. Зачем тебе это нужно? Я имею в виду. Мне кажется, это очень просто:

  1. Вы берете всю страницу своего веб-сайта и добавляете в первые строки что-то вроде session::recordAction(), и внутри этого метода вы подключаетесь к базе данных и записываете метку времени из time(), которая является нативной функцией. На самом деле не имеет значения, где вы собираетесь разместить это поле в базе данных, поскольку оно основано на ваших предпочтениях и схеме.
  2. Если вы хотите узнать, был ли пользователь в сети в последние, скажем, 10 минут, вы можете сравнить 2 отметки времени (ту, которую вы записали в базе данных и time()) и сказать что-то вроде:

    if (session :: getLastAction () <10 * $ minute) {/ * Сделайте несколько интересных вещей здесь * /} </p>

  3. Если вы записываете журнал действий из-за их восстановления в случае проблем с безопасностью или чего-то подобного, вы должны помнить, что эта отметка времени означает, когда пользователь в последний раз обновлял страницу. И в этом случае я бы посоветовал вам использовать файл .txt для их записи, а также для записи i.p. и все данные, которые вы можете восстановить от этого пользователя. Таким образом, вы не злоупотребляете базой данных ни по какой причине.

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

Советы

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

Примечание

Если я не ошибся, вы ищете способ создать систему входа в систему, и вас беспокоят файлы cookie:

  • Срок действия файлов cookie истекает (по умолчанию используется setcookie()) после закрытия браузера. Вы можете удалить их, установив прошлую метку времени, и вы можете сделать их живыми навсегда, установив очень длинную дату. Они очень полезны и до сих пор используются многими людьми.
  • Сеансы истекают через 24 или 22 минуты бездействия (не уверен, Google это).

Надеюсь, мне было понятно, если не просто попросить разъяснений. :)

1 голос
/ 03 января 2011

Немного пересмотрел мой ответ, потому что вы уже упомянули тайм-аут на стороне сервера ...

Единственное, что вы можете сделать на стороне клиента, - это использовать событие onbeforeunload для вызова страницы выхода из системы (если пользователь не щелкнул ссылку в документе ..)

К сожалению, кнопки браузера назад, вперед и обновления приведут к выходу из системы ...
Чтобы обойти это, проследите, чтобы ваш logout.php (страница автоматического выхода из системы) спал в течение 20-30 секунд, а затем проверьте, было ли последнее впечатление менее 30-45 секунд назад, прежде чем выходить из него…

Просто добавьте это к тегам скрипта в заголовке вашего документа и измените 'logout.php' на то, что вы хотите ... * Вам также может понадобиться отредактировать функцию window.onload, чтобы правильно добавить обработчики onclick, если для навигации вы используете что-то кроме ссылок ...

    var xmlhttp=false; var target; var combo;
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } }
@end @*/
if (!xmlhttp && typeof XMLHttpRequest!='undefined') { 
    xmlhttp = new XMLHttpRequest(); 
}
var dologout = true;
var logouturl = 'logout.php';
window.onbeforeunload = function() { 
    if (dologout) {
        xmlhttp.open("POST", logouturl, true); 
        xmlhttp.send(null); 
    }
}
window.onload = function() { 
    for (i=0;i<document.links.length;i++) 
    document.links[i].setAttribute("onclick","dologout = false;"); 
}

По сути, это просто присоединяет событие onclick ко всем document.links и меняет флаг 'dologout' на false, если была нажата ссылка на документ ...

Если флаг dologout имеет значение true при возникновении события onbeforeunload, он отправляет сообщение в 'logouturl' / 'logout.php' ...

0 голосов
/ 02 января 2011

Нет способа вызвать действие, которое будет вам полезно, когда браузер закрыт.http://www.webdeveloper.com/forum/showthread.php?t=93810 по этой ссылке пользователь задал похожий вопрос, и проблема, с которой он столкнулся, и я подозреваю, что у вас возникнет, заключается в том, что каждый раз, когда пользователь покидает веб-страницу, считается, что он покидает сайт, и поэтомувмешиваться в вашу деятельность по ведению журнала.Я бы просто использовал куки и заставлял их часто истекать.Регистрируйте действия пользователей каждый раз, когда они выполняют какие-либо полезные действия на вашем сайте, например, нажимая на ссылку, и меньше сосредотачивайтесь на том, сколько времени они тратят только на чтение контента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...