PHP:仅销毁$ _COOKIES而不是$ _SESSION?

时间:2013-09-25 08:44:53

标签: php session-cookies php-5.4

我只想销毁所有$ _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吗?

2 个答案:

答案 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, '/' );
    }
}
相关问题