清除 PHP 中的 Cookie 和会话数据

Clear Cookies and Session Data in PHP

我正在使用 PHP 清除所有 cookie 数据,特别是清除会话数据、清除会话 ID 并删除会话的 cookie。我将以下代码作为编码的一部分,但是当我单击“全部清除”按钮时,没有任何反应。案例中我的其余按钮按预期工作。

<?php
$lifetime = 60 * 60 * 24 * 365;
session_set_cookie_params ( $lifetime, '/' );
session_start ();

if (isset ( $_SESSION ['tasklist'] )) {
    $task_list = $_SESSION ['tasklist'];
} else {
    $task_list = array ();
}
$action = filter_input ( INPUT_POST, 'action' );
$errors = array ();

switch ($action) {
    case 'add' :
        $new_task = filter_input ( INPUT_POST, 'newtask' );
        if (empty ( $new_task )) {
            $errors [] = 'The new task cannot be empty.';
        } else {
            $task_list [] = $new_task;
        }
        break;
    case 'delete' :
        $task_index = filter_input ( INPUT_POST, 'taskid', FILTER_VALIDATE_INT );
        if ($task_index === NULL || $task_index === FALSE) {
            $errors [] = 'The task cannot be deleted.';
        } else {
            unset ( $task_list [$task_index] );
            $task_list = array_values ( $task_list );
        }
        break;
    case 'clear':
        $_SESSION = array();
        session_destroy();
        $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);
        include('task_list.php');
        break;
}

$_SESSION ['tasklist'] = $task_list;

include ('task_list.php');

?>

并且在主页中:

<!DOCTYPE html>
<html>
<head>
<title>Task List Manager</title>
<link rel="stylesheet" type="text/css" href="main.css">
</head>
<body>
    <header>
        <h1>Task List Manager</h1>
    </header>
    <main> <!-- part 1: the errors -->
        <?php if (count($errors) > 0) : ?>
        <h2>Errors</h2>
    <ul>
            <?php foreach($errors as $error) : ?>
                <li><?php echo $error; ?></li>
            <?php endforeach; ?>
        </ul>
        <?php endif; ?>

        <!-- part 2: the tasks -->
    <h2>Tasks</h2>
        <?php if (count($task_list) == 0) : ?>
            <p>There are no tasks in the task list.</p>
        <?php else: ?>
            <ul>
            <?php foreach($task_list as $id => $task) : ?>
                <li><?php echo $id + 1 . '. ' . $task; ?></li>
            <?php endforeach; ?>
            </ul>
        <?php endif; ?>
        <br>

    <!-- part 3: the add form -->
    <h2>Add Task</h2>
    <form action="." method="post">
        <input type="hidden" name="action" value="add"> <label>Task:</label> <input
            type="text" name="newtask" id="newtask"><br> <label>&nbsp;</label> <input
            type="submit" value="Add Task">
    </form>
    <br>

    <!-- part 4: the delete form -->
        <?php if (count($task_list) > 0) : ?>
        <h2>Delete Task</h2>
    <form action="." method="post">
        <input type="hidden" name="action" value="delete"> <label>Task:</label>
        <select name="taskid">
                <?php foreach($task_list as $id => $task) : ?>
                    <option value="<?php echo $id; ?>">
                        <?php echo $task; ?>
                    </option>
                <?php endforeach; ?>
            </select> <br> <label>&nbsp;</label> <input type="submit"
            value="Delete Task">
    </form>
        <?php endif; ?>

    <br><input type="hidden" name="action" value="clear"><label>&nbsp;</label><input type="submit" value="Clear All">
    </main>
    <footer>
        <p>Session ID: <?php echo session_id() ?>
    </footer>
</body>
</html>

在 clear-all burton 周围放置一个表单标签,就像您为其他值所做的那样。

目前,点击没有关联任何操作,因此它不会执行任何操作。