Таблица активных пользователей MySQL [duplicate]

Типы ссылок по умолчанию равны null, чтобы указать, что они не ссылаются на какой-либо объект. Следовательно, если вы попытаетесь получить доступ к объекту, на который ссылаетесь, а его нет, вы получите исключение NullReferenceException.

Для Ex:

SqlConnection connection = null;
connection.Open();

Когда вы запускаете это кода, вы получите:

System.NullReferenceException: Object reference not set to an instance of an object.

Вы можете избежать этой ошибки, например, следующим образом:

if (connection != null){
    connection.Open();
}

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

0
задан alex 13 August 2010 в 06:19
поделиться

5 ответов

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

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

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

7
ответ дан thomasrutter 26 August 2018 в 05:25
поделиться
  • 1
    +1 Это похоже на лучшее решение. Вы также можете использовать JavaScript для poll клиента, и если опросов не будет в течение 15 минут, истечет сеанс. Для борьбы с пользователями без JavaScript продлить срок действия на каждую загрузку страницы. – alex 13 August 2010 в 05:55
  • 2
    Да, хотя я лично перешел на не-Javascript-маршрут, продлевая срок действия на каждую загрузку на существующей сессии - для этого. – thomasrutter 13 August 2010 в 06:00
  • 3
    @alex Зачем вообще опросить? Как это может помочь? – Your Common Sense 13 August 2010 в 06:00
  • 4
    дерьмо тот же ответ, что и мои, но противоположные числа – Your Common Sense 13 August 2010 в 06:01
  • 5
    @Col. Опрос Shrapnel. Если вы хотите сделать это, вы должны закрыть окно браузера, который должен был опросить сервер. Хотя вы можете утверждать, что для обеспечения безопасности лучше оставить незанятые сеансы браузера и позволить им закончить естественным образом. – alex 13 August 2010 в 06:04

Когда пользователь входит в систему, поместите свой IP-адрес в базу данных. Если их IP-изменения, попросите их снова войти в систему.

Еще проще было бы сохранить их SessionID. Если это изменится, аннулируйте старый сеанс.

1
ответ дан Borealid 26 August 2018 в 05:25
поделиться
  • 1
    не должно быть наоборот? если пользователь входит в систему с другого компьютера, IP-адрес будет таким же! – PatrickS 13 August 2010 в 05:49
  • 2
    IP-адрес будет таким же, если обе машины находятся за брандмауэром / NAT (например, корпоративная сеть, домашняя сеть и т. Д.). Если это не так, у них, скорее всего, будет другой IP-адрес. – bisko 13 August 2010 в 05:56

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

0
ответ дан user387302 26 August 2018 в 05:25
поделиться

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

1
ответ дан Your Common Sense 26 August 2018 в 05:25
поделиться
  • 1
    OMG глупые обезьяны снова ударяют. Ни один из этих теоретиков никогда не реализовывал такой механизм в реальности, но все поддерживают их решение и мнение. – Your Common Sense 13 August 2010 в 05:50
  • 2
    Почему вы говорите, что он / она не может этого предотвратить? это может быть сделано, возможно, это не производительность или не самая лучшая идея, но это можно сделать. – Saikios 13 August 2010 в 05:50
  • 3
    +1 Я согласен. Ограничение сеанса на IP-адрес является подверженным ошибкам и предотвращает доступ законных пользователей к вашему сайту. – rook 13 August 2010 в 06:03
  • 4
    +1 Потому что я соглашусь, что вы не можете сделать это надежным. Я не знаю, почему вы были настолько опущены, но, возможно, не слетайте с ручки, когда это произойдет;) – alex 13 August 2010 в 06:13
  • 5
    Тот факт, что это то, что вы, вероятно, не должны делать, это то, о чем я не думал, когда писал свой ответ. Это правда, что лучше разрешить пользователям входить из разных мест. – thomasrutter 13 August 2010 в 07:30

Я бы посоветовал отслеживать текущий (последний) IP, с которого вошел пользователь. Когда пользователь входит в систему, измените этот IP-адрес. Проверить текущий IP-адрес на последнюю IP-часть процедуры проверки подлинности; если все по-другому, выйдите из системы. Затем может войти в систему, но это приведет к отключению входа в систему другого компьютера.

0
ответ дан zebediah49 26 August 2018 в 05:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: