如果所有处理都在我自己的站点上进行,则一切工作正常。会话变量被成功存储和检索。
现在,我获得了第三方集成,可以通过POST数据进行处理。我在每个php文件的第一行都有session_start()
调用。
start_process.php-如下设置一些会话变量,并调用重定向到response.php的第三方
$_SESSION["id"] = $id // Echoing these shows the correct values
$_SESSION["name"]= $name // Echoing these shows the correct values
response.php-此页面接收来自第三方的响应,并尝试从会话变量中获取数据
$id = $_SESSION["id"] // This comes out to be blank
$name = $_SESSION["name"] // This comes out to be blank
在我的处理页面(即response.php)上,我试图获取会话值,但没有获取会话变量。
搜索SO,很少有帖子建议检查
echo session_id();
返回首页的内容与第一页和后面的内容有所不同。进一步搜索表明以下值必须为空
echo ini_get('session.cookie_domain');
这确实是空白。现在,我陷入困境,因为我看到此值为空白,即使会话未正确加载。
您能建议下一步做什么吗?任何调试?有解决这个问题的提示吗?
更新资料
start_process.php
具有一个表单,其后操作是第三方网站的网址...作为
<?php session_start();
$_SESSION["Check"] = "Abc";
echo session_id();
>
<form name="myform" action="http://<ThirdPartyUrl.com>/pathToSomePage.jsp" method="POST">
<!-- some hidden fields with value and some other text fields -->
</form>
respone.php
第三方在发布请求中再次向我的响应页面提供响应,在这里我直接测试POST变量的输出,在这里我尝试使用会话变量
<?php session_start();
echo $_SESSION["Check"];
echo session_id(); // This is different from the one printed in the start_process.php page
?>
我不认为第三方托管位于同一台服务器上,因为当前我位于共享主机上,而第三方肯定拥有它自己的服务器。
最佳答案
在处理购物车付款网关集成时,我遇到了类似的问题。如果最终通过浏览器联系到响应脚本(即在第三方网站上完成操作后将用户重定向到response.php),则将保留会话ID和cookie。如果通过第三方站点的服务器端请求联系了您的响应脚本,则该请求将被视为全新会话。在这种情况下,许多集成允许您发送“传递”变量,该变量将与第三方站点生成的其余数据一起发送回响应脚本。您可以使用此变量将用户会话连接到稍后收到的服务器端请求(例如,您可以创建一个将这两个值相关联的数据库)。或者,您可以“欺骗”系统。如果您每次都将响应脚本位置和请求一起传递,则可以在其中构建自己的传递变量。因此,而不是像<responseURL>www.mysite.com/response.php</responseURL>
你可以发送<responseURL>www.mysite.com/response.php?key=abcd1234</responseURL>
我建议直接将key参数设置为会话ID,因此您必须构建一些可以在两者之间转换的简单方法(例如我上面提到的表)。
关于php - 从第三方站点回来后, session 不正确,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15587893/