session 重定向后丢失 header 在 safari 和 edge 中的位置(仅来自网络邮件)
session lost after redirect header location in safari and edge (only from webmail)
我在邮件里面发了一个hyperlink,目标是https://example.com/category/12345/ch3k5um/
.
.htaccess 将请求导航到 index?cat=category&id=12345&checksum=ch3k5um
如果一切正常,将设置session
$_SESSION = array( 'foo' => 'bar' );
然后重定向到目标
header ('location: /target/page', true, 302);
里面有支票 isset($_SESSION['foo'])
.
这适用于不同的 mail-clients,如 thunderbird 或 apple-mail,适用于所有浏览器。也来自正常 login-form.
如果我在像“web.de”或“gmx.net”这样的网络邮件中单击这个 link,它会转到他们的引荐来源,而不是被调用的 link,
那里 session 将被设置 - 并重定向到 /target/page -
这里 session 丢失了,但只有在 safari 和 edge 中..
经过几个小时的努力,我找到了解决方案。
使用 header 位置重定向后丢失 session 的问题,
new“samesite”属性来自 PHP7.3.
如果这是Strict
,你会失去header( 'Location: /foo' , true, 302);
之后的session
使用 Lax
很好..
此刻我不知道为什么这只发生在网络邮件中,而且只发生在 safari 和 edge 上..
脚本顶部的 session_starts:
$sessionSet = array(
'path' => '/',
'domain' => $_SERVER[ 'HTTP_HOST' ],
'secure' => TRUE,
'httponly' => TRUE,
'samesite' => 'Lax', // Strict will lose the session for some reason in some case..
'lifetime' => 18000
);
ini_set( 'session.save_path', '/dir/to/sessions' );
ini_set( 'session.cookie_lifetime', $sessionSet[ 'lifetime' ] );
ini_set( 'session.gc_maxlifetime', $sessionSet[ 'lifetime' ] );
ini_set( 'session.gc_probability', 1 );
ini_set( 'session.gc_divisor', 3 );
ini_set( 'session.cookie_samesite', $sessionSet[ 'samesite' ] );
session_set_cookie_params( $sessionSet );
session_start();
我在邮件里面发了一个hyperlink,目标是https://example.com/category/12345/ch3k5um/
.
.htaccess 将请求导航到 index?cat=category&id=12345&checksum=ch3k5um
如果一切正常,将设置session
$_SESSION = array( 'foo' => 'bar' );
然后重定向到目标
header ('location: /target/page', true, 302);
里面有支票 isset($_SESSION['foo'])
.
这适用于不同的 mail-clients,如 thunderbird 或 apple-mail,适用于所有浏览器。也来自正常 login-form.
如果我在像“web.de”或“gmx.net”这样的网络邮件中单击这个 link,它会转到他们的引荐来源,而不是被调用的 link,
那里 session 将被设置 - 并重定向到 /target/page -
这里 session 丢失了,但只有在 safari 和 edge 中..
经过几个小时的努力,我找到了解决方案。
使用 header 位置重定向后丢失 session 的问题,
new“samesite”属性来自 PHP7.3.
如果这是Strict
,你会失去header( 'Location: /foo' , true, 302);
之后的session
使用 Lax
很好..
此刻我不知道为什么这只发生在网络邮件中,而且只发生在 safari 和 edge 上..
脚本顶部的 session_starts:
$sessionSet = array(
'path' => '/',
'domain' => $_SERVER[ 'HTTP_HOST' ],
'secure' => TRUE,
'httponly' => TRUE,
'samesite' => 'Lax', // Strict will lose the session for some reason in some case..
'lifetime' => 18000
);
ini_set( 'session.save_path', '/dir/to/sessions' );
ini_set( 'session.cookie_lifetime', $sessionSet[ 'lifetime' ] );
ini_set( 'session.gc_maxlifetime', $sessionSet[ 'lifetime' ] );
ini_set( 'session.gc_probability', 1 );
ini_set( 'session.gc_divisor', 3 );
ini_set( 'session.cookie_samesite', $sessionSet[ 'samesite' ] );
session_set_cookie_params( $sessionSet );
session_start();