我想设置以下内容:
auth.example.com
sub1.example.com
sub2.example.com
Run Code Online (Sandbox Code Playgroud)
如果用户访问sub1.domain.com或sub2.domain.com且他们未登录,则会将其推送到auth.domain.com并登录.sub1.domain.com和sub2.domain.com是两个单独的应用程序但使用相同的凭据.
我尝试在php.ini中设置以下内容:
session.cookie_domain = ".example.com"
Run Code Online (Sandbox Code Playgroud)
但它似乎没有将信息从一个域传递到另一个域.
[编辑]
我尝试了以下方法:
sub1.domain.com/test.php
session_set_cookie_params(0, '/', '.example.com');
session_start();
print session_id() . "<br>";
$_SESSION['Regsitered'] = 1;
echo '<a href="http://auth.example.com/test.php">Change Sites</a>'
Run Code Online (Sandbox Code Playgroud)
auth.domain.com/test.php
session_set_cookie_params(0, '/', '.example.com');
session_start();
print session_id() . "<br>";
$_SESSION['Checked'] = 1;
print_r($_SESSION);
Run Code Online (Sandbox Code Playgroud)
会话ID完全相同但是当我转出$ _SESSION变量时,它不显示两个键,只是我在每个域下设置的任何键.
[编辑2]
我更新了[编辑]
我为所有用户数据使用php会话(不是cookie,会话ID cookie除外),当用户访问他们的个人资料user.mydomain.com时,他们会立即"退出",直到删除子域.
有没有办法接受来自所有域的会话,只要它的*.mydomain.com
我不确定这是否可行.
我公司的主要网站接受信用卡和其他付款信息.他们还有其他网站与我们托管的活动直接相关.例如,我们的主要网站是这样的:
但是有一个专门用于年度活动的另一个网站:
http://www.etm124annualgala.com
我的"活动"网站正在处理注册并保存到我们的数据库,但我们的主站点处理信用卡处理.在主网站上处理当前购买时,会话用于将数据传递到付款/ cc屏幕.
无需更改我的付款代码(接受,例如,$ _GET参数),我的$_SESSION变量不应该被遗漏吗?
例:
$_SESSION['s_address1'] = $_POST['address1'];
$_SESSION['s_address2'] = $_POST['address2'];
$_SESSION['s_city'] = $_POST['city'];
$_SESSION['s_state'] = $_POST['state'];
$_SESSION['s_zip'] = $_POST['zip'];
header('Location: https://www.etm124biz.com/payment.php?oid=' . $oid . '&src=conf&id=' . $seq);
Run Code Online (Sandbox Code Playgroud)
我的payment.php页面查找上面的地址会话变量.
我在www.example.com上有一个webapp,在api.example.com上有一个API.
webapp对API进行ajax调用.
在某个地方,我需要在api.example.com上放置一个cookie来保持会话跟踪.
为了跟踪我的问题,我在webapp和api的两个子域上设置了测试cookie.webapp在.exemple.com上设置了一个cookie,api在.exemple.com上设置了一个,在api.exemple.com上设置了另一个.Cookies仅使用Domain = .exemple.com设置.没有路径,没有HTTPOnly.
注意:最后我在api.exemple.com上只需要一个.但这些是用于测试的.
使用我的浏览器(Firefox 16)直接查询工作正常.查询api:设置并发送两个cookie.在www上查询:设置了cookie,并且也发送了来自api的两个.(当然我在api之后查询www).
现在,我清理浏览器cookie并仅查询www.在www上查询:工作正常,与以前一样.关于api的子查询,来自www的ajax请求:不发送cookie.Set-Cookies什么都不做.使用Firebug我在响应中看到了cookie.但是在后续请求或页面信息中没有它们的痕迹.
我事件试图在Firefox上启用cookie登录.绝对没有来自api的cookie的痕迹,甚至没有拒绝通知.
最后我只需要一种在api上存储一个cookie的方法.为此,我相当开放:)
信息:这两个服务器是NodeJS.我试图在客户端(document.cookies)设置服务器端的cookie(Set-Cookie标头),手动使用firebug.
其他帖子我已经检查过没有解决方案(以及其他许多我不记得的):
我有一个网站www.example.com.这将有多个子域,可以与单个应用程序或程序一起使用.例如,login.example.com将允许用户登录该站点,而system.example.com将允许用户访问信息系统,而forums.example.com将允许用户访问论坛.
我们可能需要在子域之间传递信息,例如用户ID或用户首选项等.我们如何使用SESSION变量在sudomains之间传递信息?
编辑:我喜欢这个想法:
作为脚本中的第一件事:
ini_set('session.cookie_domain', '.example.com' );
Run Code Online (Sandbox Code Playgroud)