Сохранение одного зарегистрированного пользователя в учетной записи в php - PullRequest
2 голосов
/ 12 февраля 2011

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 12 февраля 2011

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

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

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

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

0 голосов
/ 12 февраля 2011

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

Если приложение работает на одном сервере, вы можете использовать общую память (например, используя APC apc_store & apc_fetch) для хранения некоторой информации о состоянии, которая может быть разделена между процессами.Это может просто сохранить последний известный идентификатор сеанса, связанный с идентификатором пользователя.Затем вы можете быстро определить, действителен ли текущий сеанс.

Если вы работаете на нескольких серверах, возможно, стоит использовать memcache для достижения чего-то похожего.

0 голосов
/ 12 февраля 2011

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

...