2012-07-31 73 views
2

比方说,我有一个域名为sub.domain.com,登录表单为https://sub.domain.com/login.cfm如何在同一个域下的服务器上的多个ColdFusion应用程序之间共享SESSION?

在根目录下,我的应用程序中使用THIS.Name = "MyApp";它的名字我的Application.cfc。

我在这个网站上有几个子目录,我想作为单独的应用程序运行,它们有自己的Application.cfc,它扩展了根Application.cfc,但每个子目录都有它自己的名称,以便我可以创建应用程序-Scope唯一变量到该应用程序:

例如:sub.domain.com/site1/Application.cfc

sub.domain.com/Application.cfc(使用代理CFC)延伸 THIS.Name = "MyApp_Site1";

并设置特定于应用程序的某些应用程序范围变量。

但是,当他们在https://sub.domain.com/login.cfm登录中,任何会话范围变量设置有依赖于应用程序的名称“MyApp的”。

我可以使用什么样的解决方案,以接受在根目录下的应用有效的登录,然后将用户转发到他们的应用程序,同时搭载在其特定用户的属性?

回答

1

ColdFusion中的会话与特定的应用程序绑定在一起。您不能在使用ColdFusion中的会话结构的应用程序之间共享它们。 (想象一下,如果您可以从同一台服务器上的任何应用程序中获取会话信息,那么您将在共享主机上获得安全性噩梦。)

当成功记录日志时,您需要将会话信息存储在数据库或其他持久性机制中插入到应用程序的根目录中,然后将第一个请求中的客户会话信息加载到特定于站点的应用程序。你可以在你站点特定的应用程序的application.cfc中的onSessionStart()中,甚至在onRequestStart()中做到这一点。

3

简单的答案是你不能。但让我解释一下,因为这也不完全正确。首先,会话与应用程序名称相关联。所以,如果你有两个application.cfc文件都具有相同的应用程序名称,那么这两个会话都可用。但是,这不是你在做什么。由于每个名称都有不同的名称,因此每个新会话都会有新的应用程序范围。

你可能想尝试用FW \ 1和副应用是什么。这给你一个主要的app.cfc,但允许你将功能分解成不同的组。

您也可以从登录页面设置域级cookie。然后,您可以在其他应用程序中使用它们来盲目创建会话。

3

正如@戴夫弗格森提到的,最简单的方法,最coldfusiony方式共享会话数据是保持它作为一个单一的应用程序。只要名称相同,您甚至可以将内容放在不同的文件夹中。

你并不需要使用一个框架像FW \ 1或类似的东西,让你在找什么,虽然他们可能使它更容易一点。您始终可以将结构存储在应用程序范围内,其中键是子应用程序名称。例如,application.myvariable可能是应用程序[请求。subappname] .myvariable。这使您可以使用一个应用程序,但应用程序变量的作用域是各种子应用程序。你也可以对你的会话变量做同样的事情。

@Brian提到的另一种方法是使用中间商店。然后,您可以使用任何您想要的密钥来存储会话数据。正如@Dave Ferguson提到的,将您的CFID和CFTOKEN设置为域cookie(特别是CF10在setting up the cookies中有一些改进)。这样,相同的CFID和CFTOKEN将用于各种应用程序。他们仍然有不同的会话,但使用相同的会话标识符。然后,您可以将该组合用作中间商店中数据的关键字。

数据库是传统的方法,但根据您的应用程序,这可能会导致并发和锁定问题,序列化/反序列化问题或性能,然后总是处理清除旧的/过期的数据。所以你可能想看看ehcachememcached来处理这个问题。

特别是ehcache是​​一个有吸引力的选择,因为它与ColdFusion 9+捆绑在一起,可以同时使用内存和磁盘,具体取决于您的设置,缓存中的数据可以在服务重启(或重启)后存活下来,可以设置为在一定数量的不活动之后自动使记录失效。是的,它可以是used for custom caches

我建议你小心,如果你采取这种做法。您需要权衡每次(比如onRequestStart)从缓存中获取数据的性能指标与通过获取onSessionStart()中的数据并在多个应用程序中保存重复数据直到会话超时之间的内存消耗。你走的路线将完全取决于你的应用程序的性能特征,会话数据的大小等。

+0

+1有关使用APPLICATION [REQUEST.subappname]的想法+1 - 可能实现我在寻找的内容。 – 2012-08-01 11:35:52

+0

使用Ehcache的+1。这是一个出色的,非常容易使用的Adobe CF9 +,并且可用于Railo。 Railo和OpenBD也支持memcached开箱即用。 – Brian 2012-08-01 13:24:35

相关问题