PHP删除会话cookie?

PHP删除会话cookie?,php,session,cookies,Php,Session,Cookies,这就是我需要做的: 删除所有会话cookie并销毁服务器上的会话。 从浏览器中删除会话cookie <?php session_start(); $name = session_name(); $expire = strtotime('-1 year'); $params = session_get_cookie_params(); $path = $params['path']; $domain = $params['domain']; $secure = $params['secure

这就是我需要做的: 删除所有会话cookie并销毁服务器上的会话。 从浏览器中删除会话cookie

<?php
session_start();
$name = session_name();
$expire = strtotime('-1 year');
$params = session_get_cookie_params();
$path = $params['path'];
$domain = $params['domain'];
$secure = $params['secure'];
$httponly = $params['httponly'];
setcookie($name, '', $expire, $path, $domain, $secure, $httponly);
unset($_SESSION["course_code"]);
unset($_SESSION["course_name"]);
unset($_SESSION["publisher"]);
session_unset();
session_destroy();

?>


这是否正确地完成了需要完成的工作

现在,您需要在循环中删除:

//when dealing with session always add session_start() on top
session_start();
//From PHP manual: Unset all of the session variables.
//No need to do in a loop for all $_SESSION[] keys
$_SESSION = array();

//For cookies you do similar, from PHP docs:
//http://php.net/manual/en/function.setcookie.php#73484

if (isset($_SERVER['HTTP_COOKIE'])) {
    $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
    foreach($cookies as $cookie) {
        $parts = explode('=', $cookie);
        $name = trim($parts[0]);
        setcookie($name, '', time()-1000);
        setcookie($name, '', time()-1000, '/');
    }
}
session_destroy();
PS:来自PHP手册:

仅将
session\u unset()
用于不使用
$\u会话
。所以不要用那个<代码>会话_destroy()销毁所有 与当前会话关联的数据。它不会解除任何一个 与会话关联的全局变量,或取消设置会话 饼干


为了安全起见,请呼叫
会话_​再生_​id()
在登录、注销和脚本的敏感区域时。

在这里,您需要在循环中删除:

//when dealing with session always add session_start() on top
session_start();
//From PHP manual: Unset all of the session variables.
//No need to do in a loop for all $_SESSION[] keys
$_SESSION = array();

//For cookies you do similar, from PHP docs:
//http://php.net/manual/en/function.setcookie.php#73484

if (isset($_SERVER['HTTP_COOKIE'])) {
    $cookies = explode(';', $_SERVER['HTTP_COOKIE']);
    foreach($cookies as $cookie) {
        $parts = explode('=', $cookie);
        $name = trim($parts[0]);
        setcookie($name, '', time()-1000);
        setcookie($name, '', time()-1000, '/');
    }
}
session_destroy();
PS:来自PHP手册:

仅将
session\u unset()
用于不使用
$\u会话
。所以不要用那个<代码>会话_destroy()销毁所有 与当前会话关联的数据。它不会解除任何一个 与会话关联的全局变量,或取消设置会话 饼干


为了安全起见,请呼叫
会话_​再生_​id()
登录、注销和脚本的敏感区域时。

如果要取消设置所有值,只需运行
会话\u destroy()
。它将取消设置所有值并销毁会话。在
session\u destroy()
之后,
$\u session
数组的可能副本仍将在同一页面中工作。然后,您只需运行
$\u SESSION=array()
即可重置其内容。可能存在重复的删除请求-它不包括会话销毁,只包括cookie。在这里,作者要求进行会话和cookies@Phiter:下面的答案正确地引用了手册中的内容,
session\u destroy()
不会删除会话cookie。如果要取消设置所有值,只需运行
session\u destroy()
。它将取消设置所有值并销毁会话。在
session\u destroy()
之后,
$\u session
数组的可能副本仍将在同一页面中工作。然后,您只需运行
$\u SESSION=array()
即可重置其内容。可能存在重复的删除请求-它不包括会话销毁,只包括cookie。在这里,作者要求进行会话和cookies@Phiter:下面的答案正确引用了手册中的内容,
session\u destroy()
不会删除会话cookie。不需要循环,您只需使用unset($\u session);只需在顶部添加session_start(),并添加我的代码,除此之外,您不需要session_start(),正如Phiter所说,session_destroy()可以为您完成所有这些。好吧,我只需要session_start()和session_destroy(),还是需要更多?您不需要在循环中执行cookies,您可以使用unset($_session);只需在顶部添加session_start(),并添加我的代码,除此之外,您不需要session_start(),正如Phiter所说,session_destroy()为您完成所有这些。好吧,我只需要session_start()和session_destroy(),还是需要更多?您需要在循环中执行cookies