如何与其他应用程序保持PHP会话状态

如何与其他应用程序保持PHP会话状态,php,coldfusion,Php,Coldfusion,目标: 维护PHP应用程序和Coldfusion应用程序之间的会话状态,两者共同构成整个应用程序 当前方法: 登录到我们的Coldfusion应用程序(登录的唯一方式,即无法通过PHP应用程序登录)后,我们使用以下JS片段调用远程PHP文件,该文件设置PHP会话cookie(无法通过Coldfusion设置),并在后续的Coldfusion页面访问中刷新PHP会话: <script type="text/javascript"> // Create an image. var

目标:

维护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>

//创建一个图像。
var imgPing=新图像();
//将图像src设置为应用程序ping url。
imgPing.src=”http://remotePHPApplicationURL/remoteFile.php";
此代码段在登录时加载到每个Coldfusion页面,以维护并行会话

如果通过非SSL Coldfusion页面调用此方法,则此方法的工作原理与设计相同,但是,有一些SSL Coldfusion页面构成应用程序。当SSL页面调用此代码段时,我们会在Chrome Inspector中收到“不安全内容”警告(这会中断我们的SSL连接)以及“annonymous函数”错误

我们已经尝试使用CFHTTP来“获取”这个PHP文件,但它没有按照设计设置PHP cookies。关于如何使用img.src执行PHP文件与使用CFHTTP执行PHP文件,有一些我不理解的地方

问题:

是否有另一种更好的方法来调用/执行/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");
?>

希望我错了,但我想不出解决办法。然而,对于为什么很难找到一个解决方案,我确实有一些见解,希望能有所帮助

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

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

因此,在没有浏览器中的警告的情况下,在PHP服务器上无法使用SSL的情况下,从ColdFusion跨SSL维护PHP会话可能是不可能的(当然,我希望证明这是错误的)

根据您的需要,可以让从服务器到PHP服务器的任何链接向PHP服务器发送一个包含登录信息的表单帖子,以便他们在访问该第三方站点时自动登录。我不知道这是否适合你的情况,但我想我会把它扔出去


但是,主要的一点是,除了在ColdFusion应用程序的每个页面请求上维护会话之外,还要寻找另一条通往目标的路径。

您可以使用CFHTTP,但必须将其用作浏览器和远程应用程序之间的代理,并手动管理发送和接收的cookie

我已经成功地将用户从ColdFusion登录到phpBB

这个过程看起来像这样

  • CFHTTP到remoteFile.php
  • 检查返回的http响应并提取远程应用程序设置的Cookie
  • 使用CFCOOKIE在用户浏览器中进行设置

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

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

    如果在SSL页面上调用此选项,会发生什么情况:
    imgPing.src=”https://remotePHPApplicationURL/remoteFile.php";is没有SSL证书,因此出现错误。服务器有httpsdocs或private_html文件夹,对吗?如果你把上面提到的一个php文件放在这个文件夹的末尾,并在那里进行会话设置,会怎么样?服务器是我们的,不使用你列出的目录。我们正在尝试与之交互的PHP应用程序是一个商业第三方应用程序,因此我们不想通过改变它管理会话的方式来攻击它。我正在寻找另一种方法来调用远程PHP文件,而不是使用img.src,我想这是“获取”该文件的方式与CFHTTP稍有不同,允许更新会话和cookie。