再会,
我们正在尝试在 Coldfusion 8 中实现一个不使用 cookie 的 API - 相反,我们通过 GET 或 POST 为每个请求传递 cfid、cftoken 和 jsessionid。
我们正在使用 mach-ii 及其 SessionFacade。我不知道您是否需要有关此的任何进一步信息;如果你这样做,请提及。
在 Coldfusion Administrator 中,客户端变量设置为“注册表”,内存变量为“使用 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);
}
我想我不明白的第一件事是,在使用 J2EE 会话时是否有必要发送 cfid 和 cftoken?还是 jsessionid 完全完全取代了它们的功能?
其次,我希望这个应用程序(而不是整个服务器)不发送 cookie。在我的 Application.cfc 中,我将 cookie 设置为禁用,但它仍然尝试发送包含 jsessionid 的 cookie。
这有我认为奇怪的副作用:
在禁用 cookie 的 Firefox 上,输入 URL 的 cfid、cftoken 和 jsessionid 正确地保持会话状态。
但我们也将它与接受 cookie 的 iPhone 应用程序一起使用。在我们通过将 cookie 保存到本地存储来修复它之前,当您关闭应用程序并重新打开它时,cookie 丢失了。不管在 URL 中发送仍然有效的 cfid、cftoken 和 jsessionid 的事实,它仍然给我们一个“未登录”错误。
所以我有三个问题:
首先,在使用 J2EE 会话时,是否有需要存储和重新发送 cfid 和 cftoken 的情况?
其次,是否有一个应用程序级别设置我可以用来强制 jsessionid 手动存储,而不是使用 cookie?
第三,在哪个阶段提取 jsessionid 并从内存中填充会话变量?这是我可以调试或询问的东西吗,所以我可以说些什么
if jsessionid refers to a current, valid session {
...
}