Skip to content

Commit

Permalink
Merge pull request #374 from nanasess/fix-samesite-cookie
Browse files Browse the repository at this point in the history
SameSite cookie support
  • Loading branch information
Kiyotaka Oku committed Feb 13, 2020
2 parents 745c0e0 + bf2bac1 commit 930e6e5
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
7 changes: 7 additions & 0 deletions data/class/helper/SC_Helper_Session.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,13 @@ public function sfSessClose()
*/
public function sfSessRead($id)
{
// SameSite=None を未サポート UA 向け対応
if (empty($_COOKIE['ECSESSID']) && isset($_COOKIE['legacy-ECSESSID']) && $id !== $_COOKIE['legacy-ECSESSID']) {
// session_id と $_COOKIE['legacy-ECSESSID'] が異なる場合は ECSESSID の cookie が拒否されたと見なす
GC_Utils_Ex::gfPrintLog('replace session id: ECSESSID=>legacy-ECSESSID');
$id = $_COOKIE['legacy-ECSESSID']; // 互換用 cookie からセッションデータを読み込む
unset($_COOKIE['legacy-ECSESSID']);
}
$objQuery = SC_Query_Ex::getSingletonInstance();
$arrRet = $objQuery->select('sess_data', 'dtb_session', 'sess_id = ?', array($id));
if (empty($arrRet)) {
Expand Down
25 changes: 24 additions & 1 deletion data/class/sessionfactory/SC_SessionFactory_UseCookie.php
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,34 @@ public function initSession()
ini_set('session.cache_limiter', 'none');
// (session.auto_start などで)セッションが開始されていた場合に備えて閉じる。(FIXME: 保存する必要はない。破棄で良い。)
session_write_close();
session_set_cookie_params(0, ROOT_URLPATH, DOMAIN_NAME, $this->getSecureOption(), true);
$params = array(
'lifetime' => 0,
'path' => ROOT_URLPATH,
'domain' => DOMAIN_NAME,
'secure' => $this->getSecureOption(),
'httponly' => true,
'samesite' => ''
);
if ($this->getSecureOption()) {
$params['samesite'] = 'None'; // require secure option
}
if (PHP_VERSION_ID >= 70300) {
session_set_cookie_params($params);
} else {
$samesite = '';
if (!empty($params['samesite'])) {
$samesite = '; SameSite='.$params['samesite'];
}
session_set_cookie_params($params['lifetime'], $params['path'].$samesite, $params['domain'], $params['secure'], $params['httponly']);
}
// セッション開始
// FIXME EC-CUBE をネストしてインストールした場合を考慮して、一意とすべき
session_name('ECSESSID');
session_start();
if (session_id() !== '') {
// SameSite=None を未サポートの UA 向けに 互換用 cookie を発行する. secure option 必須
setcookie('legacy-'.session_name(), session_id(), $params['lifetime'], $params['path'], $params['domain'], true, true);
}
}

/**
Expand Down

0 comments on commit 930e6e5

Please sign in to comment.