我想我在 stackoverflow 上阅读并尝试了有关“会话、跨域和 ssl”的所有相关主题。不幸的是,没有任何效果。
我的情况:
loginForm.html(非 SSL)-> authUser.php(SSL)-> showAccount.php(非 SSL)
问题是,这些文件被放置在不同的子域中,并由 SSL 或非 SSL 提供服务。
loginForm.html -> http://dev.domain.com
authUser.php -> https://ssl.domain.com
showAccount.php -> http://dev.domain.com
如果用户凭据正确,authUser.php
则应创建由showAccount.php
.
如前所述,我尝试了所有发布的解决方案。作为参考,让我们看一下:Session lost whenswitching from HTTP to HTTPS in PHP。
我还尝试使用PHP Sessionssession_set_cookie_params
中提到的跨子域扩展此代码段,但这都不起作用。
我也试过ini_set('session.cookie_domain', '.domain.com');
编辑:正如所要求的答案,这里是使用的代码(最初由 Jacob 在这里发布:Session lost whenswitching from HTTP to HTTPS in PHP)
https://ssl.domain.com/user/authUser.php
<?php
// auth with database was successful, so create the session
session_set_cookie_params(0, '/', '.domain.com');
session_start();
$currentSessionID = session_id();
$_SESSION['testvariable'] = 'It worked';
$InsecureServerDomain = 'dev.domain.com';
$pagePath = '/showAccount.php';
echo '<a href="http://' . $InsecureServerDomain . $pagePath . '?session=' . $currentSessionID . '">Transfer Cookie from secure to insecure </a>';
?>
http://dev.domain.com/showAccount.php
<?php
$currentSessionID = filter_input(GET, "session");
session_set_cookie_params(0, '/', '.domain.com');
session_id($currentSessionID);
session_start();
if (!empty($_SESSION['testvariable'])) {
echo $_SESSION['testvariable'];
} else {
echo 'It did not work.';
}
?>
$_SESSION
总是空的。
有什么提示吗?