【发布时间】:2013-03-23 14:30:08
【问题描述】:
如果所有处理都在我自己的网站上进行,那么一切正常。会话变量被成功存储和检索。
现在我得到了第三方集成,它通过 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>
response.php
第三方在发布请求中再次向我的响应页面提供响应,在该页面我直接测试 POST 变量的输出,在这里我尝试使用我的会话变量
<?php session_start();
echo $_SESSION["Check"];
echo session_id(); // This is different from the one printed in the start_process.php page
?>
我认为第三方托管不在同一台服务器上,因为目前我在共享主机上,而第三方肯定有自己的服务器。
【问题讨论】:
-
请显示一些代码。
-
尝试使用setcookie()。
-
请解释为什么你觉得这篇文章应该被关闭?我被困在这里很久了,试图找到解决方案,或者至少是前进的道路..
-
第三方“发布”数据是通过常规 HTML 表单发送回您的网站,还是直接从他们的服务器发布? (例如 JSP 在服务器端创建 POST 请求)
-
@thaJeztah 提出了一个非常重要的问题……你能回答吗? POST 请求是如何产生的?是否是带有位置更改的 HTTP 3xx 代码(在这种情况下它应该可以正常工作)?您能否提供有关第三方网站或至少他们的 API 的更多详细信息?