Недавно я писал веб -сайт покупки книг. При тестировании функции входа в систему щелкнули браузер, чтобы вернуть браузер, вы обнаружите, что пользователь, который уже вышел в систему, снова вошел в систему.
Подумав в течение долгого времени, я нашел много решений в Интернете, но большинство методов, приведенных в Интернете, предназначены для использования JS для выхода и запрета пользователям нажимать на браузер для возврата.
Хотя этот метод возможен, он на самом деле не решает эту проблему в фоновом режиме. Это похоже на охрану от джентльменов, но не злодеев.
Ниже приведен метод, который вы реализовали
принцип:
После входа нажмите, нажмите на браузер, чтобы вернуться, чтобы обновить браузер. Фактически, браузер отправляет информацию о исходной форме формы.
Выйти из системы убить оригинальную сессию
// Выйти из строя void вход (запрос httpservletrequest, httpservletresponse response) throws servletexception, ioexception {httpsession session = request.getSession (); request.setattribute ("sessionId", session.getId ()); Session.RemoVeatTribute («Пользователь»); session.invalidate (); response.sendredirect (request.getContextPath () + "/index.jsp"); } При перенаправлении на страницу JSP после входа в систему сгенерированный сеанс отличается от исходного сеанса (сеанс страницы JSP включен по умолчанию)
То есть после входа в систему, нажав на браузер, чтобы вернуться, чтобы обновить сеанс, является новым сеансом. С этой точки зрения подумайте о решении.
Я поместил кусок данных в оригинальный сеанс. Я могу получить эти данные в первый раз, когда вошел в систему. После входа в систему исходный сеанс исчез. Нажмите на браузер, чтобы вернуться к обновлению. В новом сеансе нет данных. Полученное значение является нулевым
Сопоставьте данные в исходном сеансе с новым значением сеанса. Один имеет ценность, а другой - нуль. Соответствие определенно потерпит неудачу. В настоящее время вы можете дать удобную подсказку и позволить пользователю снова войти в систему.
Итак, как можно сохранить данные в исходном сеансе после входа (если исходный сеанс отменен, он исчезнет)? Рассмотрим добавление скрытого домена в форму и поместите данные в исходный сеанс в скрытый домен. После входа нажмите браузер, чтобы вернуться к обновлению. Браузер автоматически отправит данные в исходном сеансе без вручную их самостоятельно (на самом деле, ручное сохранение, возможно, придется размещать в контексте приложения ServletContext, и я никогда не пробовал его)
Немного похоже на решение повторных представлений форм, но данные в исходном сеансе не могут быть устранены здесь, потому что тот же сеанс - это не тот сеанс до и после входа.
Детали следующие: в login.jsp
<%String token = new random (). Nextlong ()+"";; session.setattribute ("token", token);%> <form action = "$ {pagecontext.request.contextPath}/servlet/clientervlet? name = "name"> </td> </tr> <tr> <td align = "right"> пароль: </td> <td> <input type = "password" name = "password"> </td> </tr> <tr> <td> </td> <td> <inpute = "value =" login "> </td> </td> <td> <input =" value = "login"> </td> </td> <td> <input = "value ="> </td> </td> <td> <input = "value ="> </td> </td> <td> <input = " name = "token" value = "$ {sessionscope.token}"> </form> В сервлете дайте дружескую подсказку и перенаправить на страницу входа в систему
Httpsession session = request.getsession (); // Решить проблему повторного входа в систему браузера после выхода // Дайте скрытое поле ввода, и получить значение скрытого домена в фоновом режиме // Обновить браузер после того, как выйти из строя генерировать новый сеанс, так что сеанс -разъединение получено как null // so hiddentoken.equals (sessiontoken) должен быть false string sessiontoken = (string) session. String hiddentoken = request.getParameter ("token"); if (! hiddentoken.equals (sessiontoken)) {request.setattribute («Сообщение», «Вы вышли из входа, пожалуйста, войдите в систему и переверните на страницу входа через 2 секунды <meta http-equiv = 'represh' content = 2; url =" + request.getContextPath () + "/client/login. request.getRequestDispatcher ("/client/message.jsp"). возвращаться; } тест:
Авторизоваться
После входа нажмите браузер, чтобы вернуться к обновлению. Браузер заставят, следует ли отправлять данные.
Нажмите, чтобы повторно отправиться
Это решает проблему нажатия браузера, чтобы вернуться, чтобы обновить пользователя и снова войти в систему после входа.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.