如何通过其他应用程序维护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检查器中同时收到“内容不安全”警告(这会中断SSL连接)以及“匿名功能”错误.
我们已经尝试过CFHTTP来“获取”这个PHP文件,但是它没有按设计设置PHP cookie.对于使用img.src与使用CFHTTP相比,如何执行PHP文件,我有些不了解.
题:
与确保似乎仅在非SSL情况下起作用的img.src相比,还有另一种更好的方法来调用/执行/ ping PHP文件吗?
这是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,但必须像浏览器和远程应用程序之间的代理一样使用它,并手动管理发送和接收的cookie.
我已成功完成此操作,以将用户从ColdFusion登录到phpBB
该过程看起来像这样
> CFHTTP到remoteFile.php
>检查返回的http响应并提取由远程应用设置的cookie
>使用CFCOOKIE在用户浏览器中进行设置
在随后的请求中,您将需要查看应用程序发送的cookie是否存在,以及是否将它们与步骤1中使用CFTTPPARAM的CFHTTP请求一起传递.应用可能设置了一个sessionid或类似的cookie,因此需要发送该id来维护会话.
标签:coldfusion,php 来源: https://codeday.me/bug/20191101/1983281.html