我只想销毁所有$ _COOKIES信息而不是$ _SESSION中的信息/数据,所以我使用下面的代码,但它也会破坏我所有的$ _SESSION数据,这不是我想要的,
// Destroy all cookies.
foreach ( $_COOKIE as $key => $value ){
setcookie( $key, "", time()-1800, '/' );
}
但如果我逐个取消$ _COOKIES数据,那么$ _SESSION数据仍未被破坏,例如,
setcookie('accept_terms_conditions', "", time()-1800, '/');
为什么foreach
代码也会破坏$ _SESSION。我可以只销毁$ _COOKIES吗?
答案 0 :(得分:9)
当您开始会话时,PHPSESSID
将添加到$_COOKIE
数组中,您在使用foreach设置setcookie
时会重置该数组。
你可以试试这个:
// Destroy all cookies.
foreach ( $_COOKIE as $key => $value ){
if($key != 'PHPSESSID'){
setcookie( $key, "", time()-1800, '/' );
}
}
答案 1 :(得分:1)
会话一般(它的php.ini参数)使用cookie。因此,您必须对要销毁的cookie进行过滤,以免破坏会话的使用。 cookie名称默认为“PHPSESSID”,但它可能是其他名称,使用session_name()来获取它。
foreach ( $_COOKIE as $key => $value ){
if ( $key != session_name() ) {
setcookie( $key, "", time()-1800, '/' );
}
}