2012-04-29 92 views
3

目标:如何维护PHP会话状态与其他应用程序

保持一个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。

问题:

有另一种,调用/执行/查验PHP文件与uring这似乎只在非SSL的情况下工作img.src更好的方法?

这里是什么样的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

如果您在SSL页面上调用此项,会发生什么情况:'imgPing.src =“https://remotePHPApplicationURL/remoteFile.php”;' –

+0

https://remotePHPApplicationURL/remoteFile.php没有SSL证书,所以我们得到一个错误。 –

+0

服务器有httpsdocs或private_html文件夹吗?如果你把如上所述的php文件放在你的文章末尾的这个文件夹中,并在那里进行会话设置? –

回答

4

您可以使用CFHTTP,但必须像浏览器和远程应用程序之间的代理那样使用它,并手动管理发送和接收的Cookie。

我做这个成功对用户登录到phpBB的从ColdFusion的

这一过程将是这个样子

  1. CFHTTP到remoteFile.php
  2. 检查返回的HTTP响应,并提取由远程应用程序设置的Cookie
  3. 使用CFCOOKIE将其设置在用户浏览器中

在随后的请求中,您需要查看应用程序发送的cookie是否存在,以及是否在步骤1中使用CFTTPPARAM将它们与CFHTTP请求一起传递。 Theres可能是由应用程序设置的sessionid或类似的cookie,这需要发送以维护会话。

+0

感谢您的回答。 –

0

希望我是错的,但我不能想到了解决办法。但是,我确实有一些洞见,为什么解决方案很难实现,希望能够有所帮助。

CFHTTP不起作用,因为它是调用PHP页面的ColdFusion服务器,而不是用户的浏览器。所以,ColdFusion服务器有一个会话,但用户的计算机没有。

有很多方法可以从浏览器中调用文件(您可以从IMG标签,CFSCRIPT标签,IFRAME,图像对象中调用它),但它们都遇到同样的问题 - 即如果您从SSL页面调用非SSL文件,浏览器将发出警告。

因此,在SSL服务器上没有SSL服务器的情况下,通过SSL从ColdFusion维护一个PHP会话可能在浏览器中没有警告的情况下是不可能的(当然,我希望证明错误)。

根据您的需要,可能会发挥什么作用是使您的服务器到PHP服务器的任何链接向PHP服务器发送一个表单信息,包括登录信息,以便它们在访问时自动登录第三方网站。我不知道这是否适合你的情况,但我想我会把它扔到那里。

然而,要点是要寻找另一条通往您的目标的路径,而不是在ColdFusion应用程序的每个页面请求上维护会话。

+0

感谢您的洞察力。 –

0

我建议使用SAML SSO实现,并且只在需要时对特定应用程序进行身份验证,您可以使用数据库将简单会话信息作为json字符串交叉存储。如果实施得当,这些体验将是无缝的,并将提供可扩展的解决方案。

相关问题