1

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

4

2 回答 2

9

当你开始一个会话时,PHPSESSID将被添加到$_COOKIE数组中,你在设置setcookie使用 foreach 时重置它。

你可以试试这个:

// Destroy all cookies.
foreach ( $_COOKIE as $key => $value ){
    if($key != 'PHPSESSID'){
        setcookie( $key, "", time()-1800, '/' );
    }
}
于 2013-09-25T08:47:50.400 回答
1

会话一般(它的 php.ini 参数)使用 cookie。因此,您必须过滤要销毁的 cookie,以免破坏会话使用的 cookie。cookie 名称默认为“PHPSESSID”,但也可能是其他名称,使用 session_name() 获取。

foreach ( $_COOKIE as $key => $value ){
    if ( $key != session_name() ) { 
        setcookie( $key, "", time()-1800, '/' );
    }
}
于 2013-09-25T08:50:53.237 回答