Каков наиболее эффективный способ сброса переменных сеанса ColdFusion (CFTOKEN, CFID, JSESSIONID)? - PullRequest
2 голосов
/ 08 августа 2011

Вывод следующего вопроса состоял в том, что перестройка токена сеанса после переключения с http на https является хорошей идеей.

В ColdFusion мне нужно восстанавливать токены сеанса после переключения с http на https?

Вопрос в том, какой самый эффективный способ сделать это?

Ответы [ 3 ]

6 голосов
/ 08 августа 2011

Это одна из тех вещей, которые легче сказать, чем сделать.

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

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

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

  2. Признать недействительным старый сеанс (возможно с сеансами Java EE и CF, но способ сделать это с сеансами CF недокументирован)

  3. Истекают старые куки

  4. Создать новую сессию

  5. Скопируйте данные из старого сеанса, которые вы сохранили на шаге 1, в новый сеанс

  6. Установка новых файлов cookie для нового сеанса

Это может показаться не слишком сложным, потенциально трудная часть делает это в одном запросе, поскольку обычно сеанс не создается до тех пор, пока не будет сделан запрос, а куки не установлены, пока не будет получен ответ.

Я думаю, что проще всего использовать Java EE, потому что вы можете вызвать invalidate () в старом сеансе и получить новый с помощью getRequestContext (). GetSession () (я верю, что это так, и я верю, что ТОЛЬКО работает с сеансами Java EE).

Я размышлял, как делать это с сеансами CF, и единственное, что я могу подумать, - это чтобы код, создающий новый сеанс, отправлял запрос CFHTTP на страницу на сайте, чтобы можно было создать новый сеанс. , Ответ CFHTTP будет содержать новый файл cookie, затем вы можете удалить старые файлы cookie и установить новый, используя тег.

Надеюсь, это поможет

3 голосов
/ 08 августа 2011

После выполнения целого ряда тестов кажется, что наиболее эффективный способ завершить сеанс - это истечь cookie-файл jsessionid со значением сейчас.

<cfcookie name="jsessionid" expires="now"/>

Это, очевидно, предполагает использование J2EEпеременные сеанса.

Если переменные сеанса J2EE не используются, то кажется, что переменные сеанса и клиентские переменные отключены от переменных cookie CFID и CFTOKEN.Это означает, что единственный способ завершить сеанс - это истечь эти куки со значением сейчас.

<cfcookie name="cftoken" expires="now"/>
<cfcookie name="cfid" expires="now"/>

Этот метод также делает недействительными клиентские переменные.

Кажется, что лучший способ убить сеансы без уничтожения клиентских переменных, не используя переменные сеанса J2EE, - создать сеансcookie, срок действия которого истекает при закрытии браузера, и проверьте это значение при обработке запроса application.cfc.Если значение не существует, очистите структуру сеанса.

0 голосов
/ 08 августа 2011
structDelete(session, "CFTOKEN");
structDelete(session, "CFID");
structDelete(session, "JESSIONID");

Удалит ключи из структуры, но я не уверен, что у вас возникнут проблемы с CF 'повторным применением' этих переменных к сеансу.

...