Несколько дней назад, когда я работал над системой регистрации, я столкнулся с популярной проблемой сессии. Проект-Spring+Springmvc+Mybatis Framework, система Javaweb-Side of Maven Management Directory. Для некоторых проблем сессии проводится следующий анализ. Здесь мы сосредоточены на проблеме жизненного цикла сеанса. Что касается других определений, мы не будем объяснять:
Во -первых, давайте объясним жизненный цикл сеанса:
Хранение: сеанс хранится на стороне сервера. Как правило, для того, чтобы он не хранился в памяти сервера (для высокоскоростного доступа), Sessinon создается, когда пользователь впервые обращается к серверу. Необходимо отметить, что сеанс будет создан только при доступе к JSP, сервлетам и другим программам. Только доступ к статическим ресурсам, таким как HTML и Image, не создаст сеанса. В приложении Javaweb вы можете позвонить по запросу. GetSession (Boolean XXX) для создания сеанса. Обратите внимание, что когда логический параметр верен, здесь вынужден генерировать новый сеанс.
1. Время истечения срока действия:
Срок действия сеанса истекает после того, как в последний раз использовался сеанс, достигнув времени сбоя.
2. Еще один метод Session.invalidate () выполняется, что активно делает сеанс недействительным.
Для неверного времени вы можете определить его, настроив свойства в web.xml:
<session-config> <session-timeout> время истечения срока действия </session-timeout> </session-config>
Единица времени отказа - минуты. Если сеанс действителен в течение одного дня, его можно установить на 60*24. Когда установлено на 0 или отрицательный, сеанс постоянно действителен. Согласно определению времени неудачи, легко понять эту ситуацию.
Почему сеанс терпит неудачу после закрытия браузера?
Основываясь на том, что известно, был написан простой пример:
@Controllerpublic class sessiontest {@requestmapping ("/sessiontest") public String SessionTest (httpservletrequest, httpservletresponse response) {System.out.println ("Успех!"); Httpsession session = request.getsession (); session.setmaxinactiveInterval (259200); request.setattribute ("creationtime", session.getcreationtime ()); // request.seect.setattribute ("id", session.getid ()); // id request.setattribut request.setattribute ("в прошлое время", session.getlastaccessationtime ()); // Последнее время использования запрос. вернуть "страница/шоу"; } <Таблица сотока сотока = "0" cellpadding = "0"> <tr> <td> время создания: </td> <td> $ {creationtime} </td> </tr> <tr> <td> id: </td> <td> $ {id} </td> </tr> <td> <td> Время: </td> <td> $ {max} </td> </tr> <tr> <td> в последний раз используется: </td> <td> $ {в последний раз} </td> </tr> <tr> <td> session: </td> <td> {sessiontest} </td> </tr>Анализ:
Видно, что время недействительной сеанса на самом деле составляет, когда браузер закрыт, поэтому только в случае браузера не закрывается и снова доступно, вы можете продолжать использовать состояние входа в систему. Что представляет собой время неверно, которое мы установили выше?
Был создан сеанс между браузером и сервером. Поскольку клиент давно не взаимодействовал с сервером (время сгибания), сервер уничтожил этот сеанс. Предыдущий сеанс, когда клиент снова взаимодействовал с сервером, не было. Насколько я понимаю, время неверно вступает в силу только во время сеанса. Если браузер закрыт, а сеанс заканчивается, время недействительной установлено на постоянно действительное, что является моментом, когда браузер закрыт и сеанс закрыт. Чтобы решить эту проблему, вы можете смешать куки с сеансами. Есть такой глупый способ:
Активно добавить файлы cookie, чтобы установить каталог сохранения и время выживания
Public Static void AddCookie (название строки, строковое значение, int Age, httpservletresponse) бросает unsupportedencodingexception {cookie c = новое cookie (имя, urlencoder.encode (значение, "UTF-8")); c.setmaxage (возраст); C.setpath (Path); response.addcookie (c); } При обращении к обращению, используйте Cookie[] cookies = request.getCookies(); Чтобы пройти печенье, получить желаемый печенье в соответствии с именем печенья, или можно сказать, что это сеанс. Наконец, вы получаете желаемый результат, и сессия (Cookie -файл по имени JSessionId) убегает из тюремного заключения браузера.
Суммировать
Вышеуказанное является решением проблемы сбоя J2EE-Session после закрытия браузера. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!