Я пытаюсь сделать простой тестовый скрипт php для сессий. Обычно он увеличивает счетчик (хранящийся в $_SESSION) каждый раз, когда вы обновляете эту страницу. Это работает, но я пытаюсь получить ссылку для уничтожения сеанса, который перезагружает страницу с параметром ?destroy=1. Я пробовал пару операторов if, чтобы проверить, установлен ли этот параметр, и если да, то уничтожить сеанс, но, похоже, это не работает.
Я даже поместил оператор if в основной текст, чтобы отображать всплывающее сообщение, если параметр установлен, но, похоже, его не улавливают.
Я знаю, что делаю что-то глупое (я новичок в PHP), но не могу найти, что это такое ...
Смотрите код здесь:
<?php
if ($_POST['destroy']) {
session_destroy();
} else {
session_start();
}
?>
<html>
<head>
<title>Session test</title>
</head>
<body>
<?php
if (isset($_POST['destroy'])) {
echo "Destroy set";
}
$_SESSION['counter']++;
echo "You have visited this page " . $_SESSION['counter'] . " times" . "<BR>";
echo "I am tracking you using the session id " . session_id() . "<BR>";
echo "Click <a href=\"" . $_SERVER['PHP_SELF'] . "?destroy=1\">here</a> to destroy the session.";
?>






Я думаю ты положил
$_POST['destroy']
Вместо
$_GET['destroy']
Вам необходимо использовать форму, если вы хотите использовать переменную $ _POST. Переменные $ _GET хранятся в URL-адресе.
Да, ты захочешь сделать
if ( $_GET['destroy'] == 1 )
или же
if ( isset($_GET['destroy']) )
Кстати, вы можете использовать
$_REQUEST['destroy']
который будет работать независимо от того, передаются ли данные в запросе POST или GET.
Действительно? почему это важно? Если кто-то может подделать GET, он также может подделать POST. Я думаю, что это не имеет значения, если ваши переменные поступают из GET или POST, вы должны относиться к обоим как к одинаково ненадежным независимо.
I know I'm doing something silly (I'm a php newbie) but I can't seem to find what it is...
так вы многому научитесь;) наслаждайтесь ...
В Руководство по PHP есть фрагмент кода для разрушения сеанса.
session_start();
$_SESSION = array();
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
session_destroy();
Не совсем хорошая практика. Важно убедиться, что ваши переменные происходят из ожидаемого источника.