SWF Flash Uploader делает недействительным JSESSIONID.Любая идея восстановить сессию со стороны сервера или со стороны клиента? - PullRequest
2 голосов
/ 15 января 2011

Я использую SWF Uploader для загрузки файлов. Я использую Java на стороне сервера.

Flash автоматически делает недействительной сессию Java. Команда SWF до сих пор не нашла никаких исправлений.

После некоторых поисков я нашел эту ссылку , в которой обсуждается идея решения этой проблемы в ASP.

В базовом PHP мы передаем идентификатор сеанса в качестве параметра POST и вручную восстанавливаем сеанс.

В ASP.Net мы также публикуем идентификатор сессии и используем Global.asax для перехвата значений. перед восстановлением сеанса и динамически добавьте нужные файлы cookie.

Как у нас есть возможность восстановить сеанс в Java?

Я также прошел этот StackOverFlow пост. Но я не могу понять, что именно они говорят. Может быть, потому что я не достаточно здоров в сеансе Java.

Особенно upload_url: "Controller?action=33&JSESSIONID=<%=request.getSession().getId()%>", эта строка. Чего он добивается этой линией? Что такое Controller & action=33.

Любые предложения по восстановлению сеанса со стороны клиента или сервера были бы более благодарны !!

Спасибо!

1 Ответ

3 голосов
/ 15 января 2011

Если я правильно прочитал связанный вопрос SO, проблема не в недействительности идентификатора сеанса, а в том, как сервер обрабатывает флэш-объект: он считается дополнительным клиентом, а не частью остальной части окна браузера. Таким образом, создаются 2 отдельных сеанса, в результате чего идентификатор при загрузке будет другим или равен нулю.

Решение состоит в том, чтобы вручную найти правильный идентификатор сеанса или заставить сервер назначить правильный идентификатор для нового сеанса. Это делается путем пересылки jsessionid во Flash в качестве переменной и последующего добавления его в качестве параметра GET в запрос HTTP-загрузки, чтобы его можно было извлечь на сервере и использовать для поиска правильного сеанса.

В этом примере автор использует Controller в качестве имени сервлета, и action=33, вероятно, используется для вызова какого-либо метода для него. Это специфично для данного конкретного приложения, но не важно для вашего решения.

Для вас важен конец строки: &jsessionid=<%=request.getSession().getId()%>

Этот код JSP по существу добавляет идентификатор сеанса Java в переменную, содержащую URL-адрес запроса на загрузку. Вы можете сделать это на простом Java или любом другом языке, который имеет доступ к правильному идентификатору сеанса - важно то, что он сначала передается в плагин Flash, , затем добавляется в запрос на загрузку, , затем снова отправляется на сервер, а , а затем используется для поиска или создания правильного идентификатора сеанса для обработки загрузки.

Это код, который автор использовал для создания нового сеансового куки:

if (request.getParameter("JSESSIONID")!=null) { 
    Cookie userCookie = new Cookie("JSESSIONID", request.getParameter("JSESSIONID"));    
    response.addCookie(userCookie); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...