What is cookies and session in java

Русские Блоги

Это передача данных между клиентом (браузером) и сервером. Например, логин пользователя, корзина и т. Д.
Управление сеансом — управление данными сеанса, сгенерированными во время сеанса между клиентом браузера и сервером.
Общие техники разговора
Я уже изучал роль объектов домена, поэтому вы также можете использовать концепцию объектов домена для поиска решений в управлении сеансами.
Существует два распространенных решения:
Технология Cookie с данными, хранящимися на клиенте
Технология сеанса, в которой данные хранятся на сервере.

2.1 Что такое куки

Файлы cookie — это технологии на стороне клиента. Программа записывает данные каждого пользователя в форме файлов cookie в соответствующий браузер пользователя. Когда пользователь использует браузер для доступа к веб-ресурсам на сервере, они получают свои собственные данные. Таким образом, веб-ресурсы обрабатывают свои собственные данные
особенностьСохраняются ли данные сеанса в клиенте браузера

Класс cookie: используется для хранения данных сеанса. Общие методы заключаются в следующем:
1. Создайте объект Cookie

Cookie(java.lang.String name, java.lang.String value)

void setPath (java.lang.String uri): установить действительный путь доступа к cookie
void setMaxAge (int expiry): установить срок действия cookie
void setValue (java.lang.String newValue): установить значение файла cookie

3. Отправьте куки в браузер, чтобы сохранить

void response.addCookie (Cookie cookie): отправить cookie

Cookie [] request.getCookies (): получать куки

Пример кода:

/** * Как проверить куки */ @WebServlet(name = "CookieDemo") public class CookieDemo extends HttpServlet < protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException < // 1. Создаем объект cookie Cookie cookie = new Cookie("name","eric"); // 2. Установить параметры cookie //2.1. Установите правильный путь для куки cookie.setPath ("/ hello"); // По умолчанию используется адрес веб-проекта. //2.2. Установить срок действия куки cookie.setMaxAge (20); // cookie сохраняется только в течение 20 секунд, считая с конца, когда cookie не настроен cookie.setMaxAge (-1); // Файл cookie сохраняется в памяти браузера, при закрытии браузера файл cookie будет уничтожен cookie.setMaxAge (0); // Удалить cookie с тем же именем, что и cookie // 3. Отправляем данные в браузер response.addCookie(cookie); // 4. Сервер получает куки из браузера // Метод 1: // String name = request.getHeader("cookie"); // System.out.println(name); // Метод 2: Cookie[] cookies = request.getCookies(); // Примечание: судите ноль, иначе указатель нуля if(cookies!=null)< // ход for(Cookie c:cookies)< String name = c.getName(); String value = c.getValue(); System.out.println(name+"="+value); >>else < System.out.println («Данные cookie не получены»); >> >

1. Сервер создает объект Cookie и сохраняет данные сеанса в объекте Cookie.

2. Сервер отправляет информацию о куки в браузер

response.addCookie(cookie);
фактически скрывает заголовок ответа, который отправил имя файла cookie набора

3. Браузер получает куки, отправленные сервером, и сохраняет их в браузере.
4. В следующий раз, когда браузер посещает сервер, он будет содержать информацию cookie

Включено в заголовок HTTP-запроса

5. Сервер получает куки-информацию от браузера

1. void setPath(java.lang.String uri) : Установите эффективный путь доступа к куки-файлу. Где эффективный путь к куки-файлу сохраняется? Тогда браузер будет выводить информацию куки-файла при доступе к серверу по эффективному пути, иначе он не будет нести информацию куки-файла. Деньги веб-проекта в пути
2. void setMaxAge(int expiry) : Установить срок действия куки
Срок действия может быть положительным целым числом, отрицательным целым числом и нулем.
Положительное целое число: указывает, что данные cookie сохраняются в кэше браузера на жесткий диск, а значение указывает время сохранения.
Отрицательное целое число: указывает, что данные cookie сохраняются в памяти браузера, и файл cookie теряется при закрытии браузера.
Ноль: удаляет данные cookie с тем же именем
3. Тип данных cookie может сохранять только некитайские типы строк. Вы можете сохранить несколько файлов cookie, но браузеры, как правило, допускают только 300 файлов cookie, каждый сайт может хранить до 20 файлов cookie, а размер каждого файла cookie ограничен 4 КБ.

Логика реализации функции:
Экономьте время в куки и вызывайте его из куки каждый раз, когда вы посещаете
Первое посещение:
1. Получить текущее время и отобразить его в браузере
2. Создайте объект cookie со временем в качестве значения cookie с именем lastTime
3. Отправьте cookie в браузер для сохранения
N-е посещение:
1. Получите данные cookie и получите cookie с именем lastTime
2. Получите значение файла cookie (время последнего доступа)
3. Показать время последнего посещения браузера
4. Обновите файл cookie с именем lastTime. Значение установлено на текущее время
5. Отправьте обновленный файл cookie в браузер для сохранения

Реализация кода:

/** * Case-последний раз, когда пользователь посетил */ @WebServlet("/last") public class HistServlet extends HttpServlet < public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException < response.setContentType("text/html;charset=utf-8"); // Получить текущее время SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String curTime = format.format(new Date()); // Получить куки Cookie[] cookies = request.getCookies(); String lastTime = null; // n-е посещение if(cookies!=null)< for (Cookie cookie : cookies) < if(cookie.getName().equals("lastTime"))< // есть cookie для lastTime, которое является n-м посещением lastTime = cookie.getValue (); // Время последнего посещения // n-е посещение // 1. Отображение последнего времени отображения в браузере response.getWriter (). write ("Добро пожаловать, ваш последний визит был:" + lastTime + ", текущее время:" + curTime); // 2. Обновляем куки cookie.setValue(curTime); cookie.setMaxAge(1*30*24*60*60); // 3. Отправляем обновленный куки в браузер response.addCookie(cookie); break; >> > /** * Первое посещение (без cookie или cookie, но без cookie с именем lastTime) */ if(cookies==null || lastTime==null) < // 1. Отображение текущего времени в браузере response.getWriter (). write ("Вы посещаете этот сайт впервые, текущее время:" + curTime); // 2. Создать объект Cookie Cookie cookie = new Cookie("lastTime",curTime); cookie.setMaxAge (1 * 30 * 24 * 60 * 60); // Сохранить на один месяц // 3. Отправить куки в браузер для сохранения response.addCookie(cookie); >> >

Логическая схема

В этом проекте много кода, и он размещен в разных пакетах в соответствии с различными функциями.
инверсия имени домена компании + название проекта + название функции
cenyu.hist.entity хранит объекты сущностей
cenyu.hist.dao Объект доступа к данным Объект доступа к данным, который в основном хранит некоторые методы объектов сущностей (CRUD-create, read, update, delete)
cenyu.hist.servlet хранит программу сервлета
cenyu.hist.ytil хранит инструменты
cenyu.hist.test хранит тестовые классы
и т. д.
Порядок написания: объект объекта-> класс DAO-> программа сервлета

Технология 3.Session

3.1 Что такое сессия

Session — это технология на стороне сервера. Используя эту технологию, сервер может создавать эксклюзивный объект Session для данных каждого пользователя, когда сервер работает. Поскольку Session является эксклюзивным для браузера пользователя, когда пользователи обращаются к веб-ресурсам сервера, Вы можете поместить свои собственные данные в свой собственный сеанс. Когда пользователь обращается к другим веб-ресурсам на сервере, другие веб-ресурсы берут данные из соответствующего сеанса пользователя для обслуживания пользователя.

3.2.Основные технологии сессии

Класс сеанса — класс HttpSession: используется для сохранения данных сеанса.
1. Создайте или получите объект сеанса
HttpSession getSession() Создайте объект Session напрямую
HttpSession getSession(boolean create) Получает логическое значение. Если задано значение true, новый объект Sessionu создается, когда не найдено ни одного объекта, соответствующего номеру сеанса. Если установлено значение false, ноль будет возвращен, если не найдено ни одного подходящего сеанса. Не рекомендуется
2. Установите объект сеанса
void setMaxInactiveInterval(int interval) : Установить эффективное время сеанса
java.lang.String getId() : Получить номер сессии
void invalidate() : Уничтожение объекта сеанса
Метод объекта Session:
1. Метод setMaxInactiveInterval автоматически перезагружает объекты сеанса по умолчанию через 30 минут.
2. Используйте метод setMaxInactiveInterval, чтобы изменить время уничтожения.
3. Глобально измените время восстановления сеанса по умолчанию в файле web.xml.

4. Вручную уничтожить объект Session с помощью метода invalidate

3. Сохраните данные сеанса в объекте сеанса
void setAttribute (имя java.lang.String, значение java.lang.Object): сохранить данные
java.lang.Object getAttribute (имя java.lang.String): получение данных
void removeAttribute (имя java.lang.String): очистить данные

4. Как избежать проблемы, когда cookie-файл JSESSIONID браузера теряется при закрытии браузера:
Решение заключается в том, чтобы вручную отправлять в браузер cookie-файлы, защищенные жестким диском.
См. регистр кода:

/** * Тестовая сессия */ @WebServlet(name = "SessionServletDemo") public class SessionServletDemo extends HttpServlet < protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException < // 1. Создаем объект Session HttpSession session = request.getSession(); // 2. Сохраняем данные сессии session.setAttribute("name","eric"); // 3. Получить данные сеанса String name = (String)session.getAttribute("name"); System.out.println(name); //4. // Получить идентификатор сессии System.out.println(session.getId()); // Изменить время сессии session.setMaxInactiveInterval(20); // Уничтожить сессию if (session!=null)< session.invalidate(); >// Вручную отправляем сохраненный на жестком диске cookie в браузер Cookie c = new Cookie("JSESSION", session.getId()); c.setMaxAge(60*60); response.addCookie(c); > >

3.3.Сессионный принцип

Интерпретация кода: HttpSession session = request.getSession ();
Процесс анализа псевдокода
1. Создайте объект Session при первом посещении и назначьте уникальный идентификатор для объекта Session, который называется JSESSIONID.

2. Отправьте JSESSIONID в качестве значения куки в браузер, чтобы сохранить

Cookie cookie = new Cookie(«JSESSIONID», sessionID);
response.addCookie(cookie);

3. При втором посещении браузер обращается к серверу с помощью файла cookie JSESSIONID.
4. Сервер получает JSESSIONID и ищет в памяти сервера, сохранять ли объект сеанса с соответствующим номером.
5. Если найден объект сеанса с соответствующим номером, верните его напрямую
6. Если не удается найти соответствующий объект сеанса, создайте новый объект сеанса и продолжите процесс с 1.

выводНайдите объект сеанса на сервере через значение cookie JSESSION

3.4.Session Case: эффект входа пользователя

Требование: для достижения эффекта входа пользователя в систему, если вход успешный, он отображает: Добро пожаловать назад, × ×. Если это не удается, показать ошибку входа
Используйте Session для различения различных пользователей для реализации. Вся реализация кода разделена на три блока. Логика обработки после отправки формы входа в систему, логика входа в систему и логика выхода из системы:
Интерфейс входа по умолчанию. index.html

    Страница входа   -->  
Имя пользователя:
Пароль:

Страница входа не удалась: fail.html

    Информационная страница   -->  Уважаемый, ваше имя пользователя или пароль были введены неправильно! Пожалуйста, введите заново! 
Вернуться на страницу входа

Основная логика обработки после отправки формы: IndexServlet.java

/** * Домашняя логика пользователя * */ public class IndexServlet extends HttpServlet < public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException < response.setContentType("text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); String html = ""; /** * Получать данные из объекта запроса домена */ /* String loginName = (String)request.getAttribute("loginName"); */ /** * 2. На домашней странице пользователя считается, что вход выполнен успешно, если сеанс не пустой и указанные атрибуты существуют! Для доступа к ресурсам. * Получить данные сеанса из домена сеанса */ // 1. Получить объект сеанса HttpSession session = request.getSession(false); if(session==null)< // Нет входа в систему, перейти на страницу входа response.sendRedirect(request.getContextPath()+"/login.html"); return; >// 2. Получить данные сеанса String loginName = (String)session.getAttribute("loginName"); if(loginName==null) < // Нет входа в систему, перейти на страницу входа response.sendRedirect(request.getContextPath()+"/login.html"); return; >html = "  Добро пожаловать," + loginName + ", Безопасный выход  " ; writer.write(html); > public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException < doGet(request, response); >>

Логика обработки входа: LoginServlet.java

/** * Логическая обработка логики * */ public class LoginServlet extends HttpServlet < public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException < request.setCharacterEncoding("utf-8"); // 1. Получаем параметры String userName = request.getParameter("userName"); String userPwd = request.getParameter("userPwd"); // 2. Логика суждения if("eric".equals(userName) && "123456".equals(userPwd))< // Успешный вход /** * Анализ: * объект домена контекста: не подходит, может перезаписывать данные. * запрашивать объект домена: не подходит, весь сайт должен использовать технологию пересылки для перехода на страницу * объект домена сеанса: подходящий. */ /* request.setAttribute("loginName", userName); //request.getRequestDispatcher("/IndexServlet").forward(request, response); response.sendRedirect(request.getContextPath()+"/IndexServlet"); */ /** * 1. После успешного входа сохраните данные пользователя в объекте сеанса */ // 1. Создаем объект сеанса HttpSession session = request.getSession(); // 2. Сохраняем данные в домене сессии session.setAttribute("loginName", userName); // 3. Перейти на домашнюю страницу пользователя response.sendRedirect(request.getContextPath()+"/IndexServlet"); >else < // Войти не удалось // Запрос перенаправления response.sendRedirect(request.getContextPath()+"/fail.html"); >> public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException < doGet(request, response); >>

Выход из логики обработки: LogoutServlet.java

/** * Логика выхода * */ public class LogoutServlet extends HttpServlet < public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException < /** * III. Безопасный выход: * Удалите указанный атрибут loginName в объекте сеанса! */ // 1. Получить объект сеанса HttpSession session = request.getSession(false); if(session!=null)< // 2. Удалить атрибут session.removeAttribute("loginName"); >// 2. Вернуться на страницу входа response.sendRedirect(request.getContextPath()+"/login.html"); > public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException < doGet(request, response); >>

Сводка: Cookie: жизненный цикл по умолчанию заключается в открытии браузера, чтобы закрыть браузер, cookie создается на сервере, а затем отправляется в браузер и сохраняется на клиенте. Этот файл cookie будет передан по следующему запросу.

сеанс: один: 1. снова откройте браузер 2. в следующий раз, когда запрос превысит установленное время соединения (по умолчанию 30 минут), новый сеанс будет воссоздан в следующий раз.

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

Третье: только один и тот же сеанс (тот же идентификатор сеанса) будет совместно использовать данные атрибута и данные cookie того же сеанса.

Четвертое: session.setAttirbute («ключ», «значение») может быть назначено сеансу, то же разделение будет использовать данные одного и того же идентификатора сеанса, а не данные других идентификаторов сеанса.

Интеллектуальная рекомендация

Groovy Integer тип

Сначала смотрите документацию: Это так же, как Java. Джава Например, определить некоторые целочисленные переменные Есть двоичный восьмеричный 16 в Java, то есть также Groovy. Двоичный литеративный дво.

HDU6390 (линейная заглушка Euler+обратные yuan watch)

Ссылка на заголовок:http://acm.hdu.edu.cn/showproblem.php?pid=6390 Идея: если n-это k времени качества p (то есть n = p^k), φ (n) = p^k-p^(k-1) = (p-1) p^(k-1) Полем Если m, n взаимодействие, &phi.

Сортировка алгоритма

Ниже приведен код, который я понял улучшенную сортировку пузыря после изучения пузырькового порядка (удаление содержимого, связанного с логотипом, является общим пузырем), только для справки Если у ва.

Контраст между добавлением, удалением, удалением, удалением, удалением, удалением и изменением двухэтажного списка цикла и последовательного списка и связанного списка

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

Источник

Читайте также:  Compare two java files
Оцените статью