2009-09-05 1 views
8

Предполагая, что я запускаю свой собственный код сеанса, каков правильный способ создания уникального и безопасного файла cookie id в Java.session id cookie в gwt rpc

Должен ли я не кататься самостоятельно, а использовать то, что уже стандартизировано?

Я использую gwt и платформу Google для платформы приложений.

Как заставить сеансы сохраняться при перезапуске браузера/сервера?

+0

Вы можете использовать сеанс в Google App Engine. Я добавил ссылку в обновленном ответе. –

+0

Как сделать сеансы сохраняющимися при перезагрузке браузера/сервера? –

+0

Один из способов, чтобы сеансы сохранялись в ходе перезапуска, - это сеансы, поддерживаемые хранилищем файлов или базой данных. Именно так работают механизмы переключения сеансов на большинстве серверов приложений. Но я удивляюсь, почему это необходимо в Google App Engine. –

ответ

24

Using Servlet Sessions in GWT

В дистанционном классе реализации сервиса:

String jSessionId=this.getThreadLocalRequest().getSession().getId(); 

В коде клиента:

String jSessionId=Cookies.getCookie("JSESSIONID"); 

Enabling_Sessions

Appengine-web.xml

<sessions-enabled>true</sessions-enabled> 
2

Нет, вы не должны кататься самостоятельно.

Идентификатор сеанса должен быть криптографически случайным (недопустимым из известных источников). Трудно получить это право самостоятельно.

1

В идеале вы должны полагаться на функции управления сессиями базовой структуры. Сервлеты & JSP, Struts и Spring имеют такую ​​поддержку, которую вы должны использовать.

В чрезвычайно редком случае, когда вы пишете свою собственную фреймворк без каких-либо базовых функций управления сеансом, на которые можно положиться, вы можете начать с класса java.security.SecureRandom для начала. Конечно, не заново изобретайте колесо здесь, так как сломанное управление сеансом - это то же самое, что и сломанная аутентификация.

Update

Учитывая, что вы используете Google App Engine, вы должны полагаться на особенности управления сеансом, обеспечиваемый двигателем. It seems that it is not switched on by default.

+1

Управление сеансом является частью спецификации J2EE и реализуется контейнером сервера приложений/сервлетов. Поэтому, если «писать собственные рамки» означает «писать код поверх необработанного HTTP-протокола», вы всегда должны использовать управление сеансом. – ChssPly76

+0

Да, это так. –

+0

Кстати, Axis 1.x реализует управление сеансом с использованием класса SecureRandom. Я не уверен, почему они выбрали его, но это единственный разовый случай, с которым я столкнулся. –