Это странно.Я недавно переместил сайт на виртуальный хостинг на CF11 (я полагаю), поэтому я не знаю, имеет ли это какое-либо отношение к этому.Этого раньше не было.
Я все еще использую application.cfm (не cfc), и в настоящее время это выглядит так:
<CFAPPLICATION
NAME="catholicity"
SESSIONMANAGEMENT="Yes"
SESSIONTIMEOUT=#CreateTimeSpan(0,2,0,0)#
CLIENTMANAGEMENT="Yes"
CLIENTSTORAGE="Cookie"
>
Наш сайт catholicity.co.nz позволяет пользователямдобавить бизнес-списки.Процесс листинга осуществляется поэтапно, сначала выбирается категория, а затем вводится дополнительная информация.Мы храним данные листинга в переменной сеанса с именем «session.post».После выбора категории код jQuery передает выбранную категорию в функцию Coldfusion CFC, которая создает файл session.post и добавляет к нему выбранную категорию (session.post.category
).Затем jQuery загружает новую страницу для ввода дополнительной информации.Я подтвердил, что jQuery может читать сессионный объем, созданный в cfc.Именно на этой второй странице область сеанса, кажется, теряется.Session.post не появляется, когда я выкидываю область сеанса вверху этой новой страницы.
код перенаправления javascript выглядит следующим образом:
top.location.href="/post/post.cfm?cat=" + cat + "&subcat=" + subcat + "&mode=" + mode;
Значения cat и subcat читаются напрямуюиз cfc, который возвращает session.post
<cffunction.....>
...
<cfset session.post.category = nCategoryId & "^" & sCategory>
<cfset session.post.subcategory = arguments.id & "^" & sSubcategory>
<cfset session.post.prev="subcategory_id">
<cfset session.post.next="details">
...
<cfreturn session.post>
</cffunction>
Странная часть заключается в том, что если пользователь вошел в систему во время создания нового бизнес-списка, эта проблема не возникает.Я не уверен, почему, потому что при входе в систему создается отдельная переменная сеанса с именем session.user
, и, насколько я знаю, нет никакой связи между session.user
и session.post
.
Проблема может быть проверена вhttp://www.catholicity.co.nz, и нажмите «Добавить бизнес» вверху.Я выгрузил сессию и область видимости клиента на первой и второй страницах, с предупреждением JS о обратном вызове от начального вызова cfc.
EDIT
Мой application.cfm выглядит так:
<CFAPPLICATION
NAME="catholicity"
SESSIONMANAGEMENT="Yes"
SESSIONTIMEOUT=#CreateTimeSpan(0,2,0,0)#
CLIENTMANAGEMENT="Yes"
CLIENTSTORAGE="Cookie"
>
<cfif structKeyExists(session,"cfid")>
<cfcookie name="cfid" value="#session.cfid#" expires="NOW">
<cfcookie name="cftoken" value="#session.cftoken#" expires="NOW">
</cfif>
<cfif structKeyExists(url, "logout")>
<cfset session.user.authenticated = 0>
</cfif>
<cfparam name="session.cfid" default="">
<cfparam name="session.cftoken" default="">
<cfparam name="session.mode" default="temp">
<cfparam name="session.user.authenticated" default="0">
<cfparam name="session.user.confirmed" default="0">
<cfparam name="session.user.disabled" default="0">
<cfparam name="session.user.id" default="">
<cfparam name="session.user.email" default="">
<cfparam name="session.user.contact_name" default="">
<cferror type="exception" template="/error.cfm">
<cfscript>
application.accepted_docs = "application/pdf,application/msword,application/vnd.ms-excel,text/plain,vnd.ms-word.document.12,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
application.accepted_images = "image/jpg,image/gif,image/jpeg,image/png,image/x-png,image/pjpeg ";
application.accepted_videos = "video/x-flv,video/mp4,video/x-msvideo,video/x-ms-asf,video/x-ms-wmv,audio/x-ms-wma";
....
</cfscript>
<cflock name="#APPLICATION.applicationName#"
type="Exclusive"
timeout="20"
throwontimeout="Yes">
<cfparam name="APPLICATION.SessionTracker" default=#StructNew()#>
<cfscript>
sUserInfo = StructNew();
sUserInfo.Address="#CGI.REMOTE_ADDR#";
sUserInfo.CFID="#session.cfid#";
sUserInfo.Token="#session.cftoken#";
sUserInfo.Address="#CGI.REMOTE_ADDR#";
sUserInfo.Time="#Now()#";
sUserInfo.Template="#CGI.CF_Template_Path#";
ID = "#session.cfid##session.cftoken#";
</cfscript>
<CFSET dummy = StructInsert(APPLICATION.SessionTracker, ID, sUserInfo, true)>
</cflock>
Я пытался комментировать потенциально хитроумные фрагменты кода, но безрезультатно.