目标:
维护PHP应用程序和Coldfusion应用程序之间的会话状态,它们共同构成整个应用程序。
当前方法:
登录我们的Coldfusion应用程序(登录的唯一方法,即无法通过PHP应用程序登录),我们使用以下JS代码段来调用远程PHP文件,该文件设置PHP会话cookie(无法设置)通过Coldfusion),以及随后的Coldfusion页面访问,刷新PHP会话:
<script type="text/javascript">
// Create an image.
var imgPing = new Image();
// Set image src to App A ping url.
imgPing.src = "http://remotePHPApplicationURL/remoteFile.php";
</script>
登录后,每个Coldfusion页面都会加载此代码段以维护并行会话。
如果通过非SSL Coldfusion页面调用,此方法按设计工作,但是,有一些SSL Coldfusion页面构成了应用程序。当SSL页面调用此代码段时,我们在Chrome Inspector中都会收到“不安全内容”警告(这会破坏我们的SSL连接)以及“匿名函数”错误。
我们已经尝试过CFHTTP来“获取”这个PHP文件,但它没有按照设计设置PHP cookie。关于如何使用img.src执行PHP文件而不是使用CFHTTP,我有些不明白的事情。
问题:
是否有另一种更好的方法来调用/执行/ ping PHP文件而不是img.src似乎只能在非SSL情况下工作?
以下是PHP文件的示例:
<?php
error_reporting(E_ALL & ~E_NOTICE);
define('THIS_SCRIPT', 'index');
define('CSRF_PROTECTION', true);
$globaltemplates = array();
require_once('./global.php');
$phpapp->session->save();
setcookie('userid', 'uid');
setcookie('password', 'pass');
header("Content-Type: image/png");
?>
答案 0 :(得分:4)
您可以使用CFHTTP,但必须像浏览器和远程应用程序之间的代理一样使用它,并手动管理发送和接收的cookie。
我已经成功地将用户从ColdFusion登录到phpBB
这个过程看起来像这样
在后续请求中,您需要查看应用程序发送的cookie是否存在以及是否在步骤1中使用CFTTPPARAM将它们与CFHTTP请求一起传递。可能是应用程序设置的sessionid或类似的cookie,需要发送它以维持会话。
答案 1 :(得分:0)
希望我错了,但我想不出解决方案。但是,我确实有一些见解,为什么难以找到一个解决方案,希望对此有所帮助。
CFHTTP无法正常工作,因为它是调用PHP页面的ColdFusion服务器,而不是用户的浏览器。因此,ColdFusion服务器有会话,但用户的计算机没有。
有很多方法可以从浏览器中调用文件(你可以从IMG标签,CFSCRIPT标签,IFRAME,图像对象......中调用它),但它们都遇到了同样的问题 - 即如果您从SSL页面调用非SSL文件,浏览器将发出警告。
因此,如果没有浏览器中的警告,那么在PHP服务器上没有SSL的情况下维护来自ColdFusion的PHP会话可能是不可能的(但是,当然,我希望被证明是错误的。)< / p>
根据您的需要,可能有用的是从服务器到PHP服务器的任何链接向PHP服务器发送一个表单帖子,包括登录信息,以便他们在访问第三个时自动登录派对网站。我不知道这是否适用于你的情况,但我想我会把它扔到那里。
然而,重点是寻找目标的另一条路径,而不是在ColdFusion应用程序的每个页面请求上维护会话。
答案 2 :(得分:0)
我建议使用SAML SSO实现,并且只在需要时对特定应用程序进行身份验证,您可以使用DB将简单会话信息交叉存储为json字符串。如果实施得当,体验将是无缝的,并将提供可扩展的解决方案。