用PHP清除Cookie和会话数据

时间:2016-03-08 00:20:18

标签: php html cookies session-cookies

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

<?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>

1 个答案:

答案 0 :(得分:1)

在clear-all burton周围放置一个表单标签,以及为其他值做的表单。

目前,点击没有关联任何操作,因此它什么都不做。