2012-04-26 3 views
0

Добрый день,Использование ColdFusion сеансов без печенья

Мы пытаемся реализовать API в ColdFusion 8 посредством куки не используются - вместо этого, мы передаем CFID, CFTOKEN и JSESSIONID от GET или POST для каждого запроса.

Мы используем mach-ii и его SessionFacade. Я не знаю, нужна ли вам дополнительная информация об этом; сообщите пожалуйста если сделаете.

В контроллере Coldfusion переменные клиента установлены в «Реестр», для каждой из переменных «Использовать переменные сеанса J2EE,« Включить переменные приложения »,« Включить переменные сеанса ») отмечены переменные памяти.

Мои Application.cfc псевдо-конструктор выглядит

<cfset this.name = "#cgi.server_name#" /> 
<cfset this.loginStorage = "session" /> 
<cfset this.sessionManagement = true /> 
<cfset this.setClientCookies = false /> 
<cfset this.setDomainCookies = false /> 
<cfset this.sessionTimeOut = CreateTimeSpan(0,1,0,0) /> 
<cfset this.applicationTimeOut = CreateTimeSpan(0,1,0,0) /> 

и нет ничего в onSessionStart или onSessionEnd.

Для проверки сессии, я использую плагин и в методе Preprocess у меня есть:

if (not getSessionFacade().has("authUserLoggedIn")){ 
    arguments.eventContext.clearEventQueue(); 
    arguments.eventContext.announceEvent("nologin", newEventArgs); 
} 

Я думаю, что первая вещь, которую я не понимая это, есть ли какие-либо обстоятельства, при которых необходимо отправлять cfid и cftoken при использовании сессий J2EE? Или jsessionid полностью и полностью заменяет свою функцию?

Во-вторых, я хочу, чтобы это приложение (а не весь сервер) не отправляло файлы cookie. В моем приложении Application.cfc у меня есть файлы cookie, отключенные, но он по-прежнему пытается отправить файл cookie, содержащий jsessionid.

Это то, что я считаю странные побочные эффекты:

В Firefox с Cookies отключены, то CFID, CFTOKEN и JSESSIONID вошел в URL правильно поддерживать состояние сеанса.

Но мы также использовали его с iPhone-приложением, которое принимает куки. Прежде чем мы исправили его, сохранив файл cookie в локальном хранилище, когда вы закрыли приложение и снова открыли его, файл cookie был потерян. Независимо от того, что все еще действительные cfid, cftoken и jsessionid отправляются в URL-адресе, он все равно дал нам ошибку «Не зарегистрирован».

Поэтому у меня есть три вопроса:

Во-первых, при использовании J2EE сессий, есть какие-либо обстоятельства, при которых мне нужно хранить и повторно отправить CFID и CFTOKEN?

Во-вторых, есть ли параметр уровня приложения, который я могу использовать, чтобы заставить jsessionid храниться вручную, а не использовать файл cookie?

В-третьих, на какой стадии находится jsessionid и переменные сеанса, заполненные из памяти? Это то, что я могу отладить или допросить, так что я могу положить что-то, чтобы сказать

if jsessionid refers to a current, valid session { 
    ... 
} 
+0

Что касается вашего последнего вопроса (в-третьих), это явно «onSessionStart()» стрельба. Когда onSessionStart() срабатывает, это означает, что у вас есть новый jsessionID; предположительно пустым. –

+0

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

ответ

3

Эта установка:

<cfset this.setClientCookies = false /> 

препятствующего клиентские куки (CFID/CFTOKEN) от того установлен. Это связано с управлением клиентами и не управление сеансом.вы не задали значение clientManagement в своих свойствах, поэтому, вероятно, оно было по умолчанию равно true - это означает, что эти значения создаются, но не устанавливаются как файлы cookie. Если вы не передаете их по URL-адресу (я говорю о cfid/cftoken сейчас), вы можете создавать множество из них. Проверьте свой реестр :) И, как правило, если вы не используете их, установите clientmanagement на false.

CFID и CFTOKEN используются для клиентских переменных, даже если у вас есть jsessionid; включен. Но они не должны быть необходимы для сеанса при использовании jsessionID.

В свойствах приложения, о которых я знаю, нет равных setClientCookies. Логически я ожидал бы увидеть «setSessionCookies =», чтобы у вас был гранулированный контроль над этими vars. Но это не так. Я подозреваю, что может быть потому, что CF нажимает на базовую архитектуру сессии j2ee, и это делается так, как это делается под капотом. Но не цитируйте меня.

Однако, интересно, почему вы не просто ловушки jsessionID; в onSessionStart() и передать его по вашим URL-адресам по мере необходимости. Куки-файлы могут быть установлены - или они могут не основываться на платформе или клиенте ... но до тех пор, пока у вас есть это на URL-адресе, вы правы?

+0

Спасибо за «clientManagement», но в отношении вашего последнего абзаца, если cookie принят, но позже потерян, даже с jsessionid в URL-адресе, сеанс по-прежнему недействителен. Я надеялся избавиться от сессионных файлов cookie вообще. Может ли быть способ взломать базовую java и опросить/изменить его там? –

0

Эта настройка:

<cfset this.setClientCookies = false /> 

устанавливает в CFID & CFTOKEN или JSessionID печенье. Они используются для сеанса клиента AND! Поэтому, если вы установите для этого значение false, и вы не ставите CFID/CFTOKEN или JSESSIONID в URL-адрес запроса, вы не можете использовать управление сеансом.

Смежные вопросы