2016-05-19 4 views
1

Мы используем для нашего кота веб-приложения и для управления сеансами мы используем HttpSession в Javax.servlet.http.HttpSessionHttpSession в коте

Это, как мы устанавливаем сеанс Id и несколько атрибутов пользователя в HTTPSession

HTTPSession session = request.getSession() 
session.setAttribute("sessionIdNo",sessionIdNo); 

Так мы получаем идентификатор сеанса и несколько пользовательских атрибутов, которые мы сохранили в предыдущем HTTP-вызове.

HTTPSession session = request.getSession(); сеанс .getAttribute ("sessionIdNo");

Мой Вопрос

  1. Как можно его, что в следующем HTTP вызов из браузера, мы можем получить атрибут сеанса в стороне сервера, который установлен в предыдущем HTTP вызова в HTTPSession.

    ПРИМЕЧАНИЕ. Я также не сохранял файлы cookie, я считаю, что его не отправили из моего браузера. Имеет ли какое-либо соединение с JSESSION_ID.

  2. Если это мой второй вопрос: как это управление сеансом HTTP работает в приложениях Desktop, я имею в виду без использования браузера? Я имею в виду, как использовать JESSION_ID здесь для управления сеансом.

  3. Если нет, то каким образом?

ответ

1

HttpSession подразумевает использование, ну, HTTP. В вашем браузере cookie JSESSIONID используется для ссылки на сеанс. Пользователь приходит в первый раз, и им назначается новый идентификатор сеанса (request.getSession(). GetId()). Это помещается в файл cookie JSESSIONID и отправляется обратно в браузер. При последующих запросах браузер отправляет cookie, который сообщает Tomcat, какой сеанс использовать.

Если вы создали настольное приложение, вы можете использовать другой механизм. Но Tomcat является, в частности, HTTP-сервером и таким образом является «нормальным» механизмом. Настольное приложение все еще может взаимодействовать с Tomcat и веб-сервисами, но его интерфейс, скорее всего, будет отображаться, например, Java Swing.

EDIT

Вы можете посмотреть сеансы создаются и уничтожаются только немного кода:

import javax.servlet.annotation.WebListener; 
import javax.servlet.http.HttpSessionEvent; 
import javax.servlet.http.HttpSessionListener; 

@WebListener 
public class DemoSessionListener implements HttpSessionListener { 

    @Override 
    public void sessionCreated(HttpSessionEvent sessionEvent) { 
     System.out.println("session \"" + sessionEvent.getSession().getId() + 
          "\" created); 
     } 
    } 

    @Override 
    public void sessionDestroyed(HttpSessionEvent sessionEvent) { 
     System.out.println("session \"" + sessionEvent.getSession().getId() + 
          "\" destroyed); 
    } 
} 
+0

Если я запустить вызов HTTP с помощью завивки команды еще есть возможность использовать один и тот же HttpSession в следующий звонок. Как это возможно? Как мой HttpSession использует один и тот же сеанс в следующем вызове. Я также не прошел ни одного поля ввода в файлах cookie. – Harry

+0

Как вы уверены, что это та же сессия? Похоже, что завиток не включает файлы cookie по умолчанию, так что это звучит не так. – stdunbar