【问题标题】:PHP $_SESSION between different pages recalled from different domains (but located in the same domain)从不同域调用的不同页面之间的PHP $_SESSION(但位于同一域中)
【发布时间】:2011-02-16 09:08:00
【问题描述】:

我有这个问题:我有两个站点,例如 SITEA 和 SITE B

从 SITEA.COM,用户进入此页面 (SITEA.COM/gopage) 代码如下:

session_start();
$_SESSION['example'] = "example";       
header("Location: SITEB.COM");

在 SITEB.com,我有

<script type="text/javascript" src="SITEA.COM/include/script.js.php"></script>

在 script.js.php(由 SITEB.COM 调用,但托管在 SITEA.COM)中

<?php 
   header("Content-Type: text/javascript");

     session_start();

     ... php code that generates a dynamic javascript code

问题是我在最后一页中的 php 代码无法读取 $_SESSION['example'],尽管它们都在 SITEA.COM 上

如果它们是从不同的域中调用的,$_SESSION 不起作用?

【问题讨论】:

  • 一个会话只能用于一个域。你想做什么?应该有人能够提供替代方案。
  • siteA 是移动版网站,siteB 是桌面版网站。在siteB中,我想包含我的script.js.php,如果您在siteA中使用移动设备,它会自动重定向(基于useragent)到siteA,有链接“转到桌面版本”,应该转到siteB。 com 并禁用(通过会话)自动重定向到站点 A。

标签: php session dns


【解决方案1】:
if they are recalled from different domains the $_SESSION doesnt work?

确实如此。这是设计使然。会话绑定到一个 Web 域。否则,营销人员和类似人员将能够在您浏览互联网时跟踪您的会话。你只需要放弃你现在走的路线:这行不通。

另一种常用的方法是在将用户重定向到其他网站时构建查询字符串。在您的代码中,您可以将其更改为:

session_start();
$_SESSION['example'] = "example";       
header("Location: SITEB.COM/?example=" . $_SESSION['example']);

然后,在另一个网站上,您可以检查 $_GET['example'] 并像这样重新创建会话:

session_start();
$_SESSION['example'] = $_GET['example']

这不是一个完全透明的解决方案,但它非常接近。

【讨论】:

  • 我认为,由于与会话一起工作的两个 php 文件都在同一个域中,我可以遵循这条路线。由于这是不可能的,我必须弄清楚其他事情,但我不能使用你的提示,因为重定向到 SITEB.COM/index.html,而我的脚本作为 javascript (.js.php) 包含在其中,所以它无法读取查询字符串...
  • 包含的 PHP 文件可能在同一个域中,但浏览器最初请求了另一个域。永远不会将来自一个域的会话提供给另一个域。
【解决方案2】:

如果他们是从不同的地方召回的 $_SESSION 域不起作用?

正确。

【讨论】:

    猜你喜欢
    • 2020-04-30
    • 2010-10-04
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 2015-10-22
    • 2020-05-15
    相关资源
    最近更新 更多