#java #jquery #session
#java #jquery #сеанс
Вопрос:
У меня есть запрос, я хочу, чтобы, если пользователь уже вошел в систему на веб-странице и снова повторно входит в систему с того же или другого компьютера, тогда его предыдущий сеанс должен быть прерван, и он автоматически выходит на главную страницу. Я использую jquery на стороне клиента и сервлеты на серверной части. Я использую tomcat 6 в качестве веб-сервера и компилятор jdk1.6. Я просто хочу, как это делает yahoo, если пользователь зарегистрирован с какого-то компьютера, и в следующий раз, когда он снова войдет в систему с какого-то другого или того же компьютера, он автоматически выйдет из предыдущего сеанса и будет перенаправлен на главную страницу. Пожалуйста, скажите, как я могу это реализовать.
Комментарии:
1. Пожалуйста, предоставьте дополнительную информацию, такую как… на каком языке вы разрабатываете?
2. Привет, Мэтт, я использую jquery на стороне клиента и сервлеты на серверной части.
3. Какой веб-сервер вы используете? Какой JDK?
4. Привет, Джеймс, спасибо за ваш ответ, я использую tomcat 6, а версия jdk также jdk1.6. скажите, пожалуйста, как я могу реализовать
Ответ №1:
Вот мой действительно надуманный метод для обнаружения разных входов в систему
-
Когда пользователь войдет в систему, сгенерируйте для него хэш-ключ, сохраните его в его сеансе и в базе данных. В базе данных хранится только один хэш-ключ для пользователя (это не история входа в систему)
-
Всякий раз, когда пользователь обращается к странице, убедитесь, что хэш-ключ в сеансе совпадает с ключом в базе данных
-
Если это совпадает, все хорошо.
-
Если он не совпадает, это не с того же компьютера; потому что, если пользователь войдет в систему в другом месте, будет сгенерирован новый хэш-ключ, который заменит тот, что в базе данных.
4a. Скажите пользователю на исходном компьютере, что «Вы входили в систему в другом месте», и отмените весь сеанс там (то есть выйдите из системы). Но это происходит только при следующем обновлении страницы — чего можно избежать, если вы используете AJAX
Что касается того же входа — если пользователь пытается войти на сайт, когда он уже вошел в систему, просто отобразите сообщение, что он уже вошел в систему? Какова цель удаления данных сеанса, если он снова входит в систему (мы говорим об одном и том же пользователе, заходящем на тот же сайт на том же компьютере здесь?)
Комментарии:
1. Спасибо Extrakun за ваш ответ, пожалуйста, я хотел бы сообщить вам, что я использую tomcat 6 vesrion и jdk 1.6, можете ли вы сказать мне, как я могу реализовать это с помощью сервлетов или какого-либо другого метода??
2. Принцип одинаков для любых веб-приложений. Я полагаю, вы используете JSP. Вы могли бы узнать, как создавать сеансы в JSP и получать доступ к БД с его помощью, и выполнить описанные выше шаги. Я думаю, что они одинаковы для ASP, JSP или PHP, поскольку я знаком только с PHP
Ответ №2:
Если вы присоедините идентификатор сеанса к идентификатору пользователя, то при создании нового идентификатора сеанса он заменит текущий идентификатор сеанса, и когда вы проверите действительный идентификатор сеанса, вы увидите, что старый идентификатор больше не найден, поэтому ваше приложение сообщит им, что они вышли из системы.
Если вы хотите отслеживать идентификатор сеанса, тогда просто установите допустимый флаг, который уникален между идентификатором пользователя и допустимым флагом, чтобы у каждого пользователя был только один допустимый сеанс одновременно.
Если вы видите, что у них есть идентификатор второго сеанса, вы можете сообщить им, что они вышли из первого сеанса из-за входа в новый сеанс.
Комментарии:
1. Спасибо Джеймс за ваш ответ, не могли бы вы, пожалуйста, подсказать мне способ или пример, чтобы я мог это реализовать. Я хотел бы, чтобы вы сказали, что я использую tomcat 6 и jdk1.6.пожалуйста, сообщите мне решение.
2. Мой способ предполагает, что вы используете базу данных, что может быть большим предположением.
3. да, я использую базу данных mysql. можете ли вы сказать мне или предложить способ, чтобы я решил эту проблему
4. Я думаю, что они уже сделали. Сначала вам нужно применить какой-то идентификатор сеанса. Вы можете проверить, как сгенерировать хэш MD5 или использовать библиотеки сеансов J2EE. Затем вы должны сохранить эти данные в таблице сеансов или в виде столбца в вашей таблице пользователей. После этого каждый раз, когда ваш пользователь входит в систему, ваш сервлет будет генерировать новый хэш / идентификатор сеанса и сравнивать его с сохраненным. Если они совпадают, ничего не происходит. Если они разные, то он предположит, что начал новый сеанс в другом месте, и будет действовать соответствующим образом.
Ответ №3:
Когда пользователь снова войдет в систему, просто сгенерируйте новый идентификатор сеанса, и предыдущий станет недействительным.
Комментарии:
1. Спасибо за ваш ответ, не могли бы вы, пожалуйста, сказать мне, как, я хочу, чтобы он автоматически выходил из предыдущего входа, если он снова открывает новый сеанс.
2. Попробуйте это us2.php.net/manual/en/function.session-regenerate-id.php session_regenerate_id
3. @Extrakun, не думайте, что он использует PHP.
4. Я использую java (сервлеты) и сервер tomcat.