跨子域的PHP会话

dra*_*ank 89 php authentication session cross-domain

我想设置以下内容:

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]

我更新了[编辑]

jer*_*oen 130

我不知道问题是否仍然存在,但我遇到了同样的问题,并在调用session_set_cookie_params()之前解决了设置会话名称的问题:

$some_name = session_name("some_name");
session_set_cookie_params(0, '/', '.example.com');
session_start();
Run Code Online (Sandbox Code Playgroud)

我在php.ini中没有改变任何东西,但现在一切正常.

  • 我确认,它解决了这个问题.我厌倦了在那里得到答案:http://stackoverflow.com/questions/4948340/how-to-pass-session-variable-to-a-page-in-the-parent-directory.但我在这里找到了它. (9认同)
  • 作品完美!一直在寻找这个年龄.它是`$ some_name = session_name("some_name");`就是这样做的.谢谢你和upvote. (5认同)
  • 添加`session_name("domain");`对我来说也是缺少的成分.关于这些会话设置的php.net文档缺乏.php.net上有社区帖子,表明在应用对session_set_cookie_params()的更改之前需要定义session.name. (4认同)
  • 是的.证实.很好的一个人在那里玩了很多年;) (3认同)

dre*_*ewm 24

有一两件事可以神不知鬼不觉防止被读取区域上的会话数据,尽管饼干被正确设定.example.com是PHP了Suhosin补丁.根据问题中的示例,您可以正确配置所有内容,但它可能无法正常工作.

关闭以下Suhosin会话设置,然后您重新开始营业:

suhosin.session.cryptua = Off 
suhosin.session.cryptdocroot = Off
Run Code Online (Sandbox Code Playgroud)


Geo*_*orn 5

尝试使用:

session.cookie_domain = "example.com"
Run Code Online (Sandbox Code Playgroud)

代替:

session.cookie_domain = ".example.com"
Run Code Online (Sandbox Code Playgroud)

注意缺失的时期.

但是要小心使用它,因为并非所有浏览器都支持它.

  • 哪些浏览器不受支持? (9认同)
  • 这里有什么浏览器支持?这是服务器端操作. (9认同)