清除 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> </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> </label> <input type="submit"
value="Delete Task">
</form>
<?php endif; ?>
<br><input type="hidden" name="action" value="clear"><label> </label><input type="submit" value="Clear All">
</main>
<footer>
<p>Session ID: <?php echo session_id() ?>
</footer>
</body>
</html>
在 clear-all burton 周围放置一个表单标签,就像您为其他值所做的那样。
目前,点击没有关联任何操作,因此它不会执行任何操作。
我正在使用 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> </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> </label> <input type="submit"
value="Delete Task">
</form>
<?php endif; ?>
<br><input type="hidden" name="action" value="clear"><label> </label><input type="submit" value="Clear All">
</main>
<footer>
<p>Session ID: <?php echo session_id() ?>
</footer>
</body>
</html>
在 clear-all burton 周围放置一个表单标签,就像您为其他值所做的那样。
目前,点击没有关联任何操作,因此它不会执行任何操作。