我想我在「stackoverflow」上閱讀並嘗試了關於「會話,跨域和ssl」的所有相關主題。不幸的是沒有用。PHP會話丟失:子域和https(SSL到非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 when switching from HTTP to HTTPS in PHP。
我也試着擴展這個片段,如PHP Sessions across sub domains中所提到的session_set_cookie_params
,但這不起作用。
我也試過ini_set('session.cookie_domain', '.domain.com');
編輯:正如在回答要求,這裏是使用的代碼(最初被張貼雅各這裏:Session lost when switching 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
總是空的。
有什麼提示嗎?
巴斯特,謝謝你的回答!我剛剛添加了所需的代碼。 – Andrew 2012-04-24 10:08:04