Хорошо, ваш тег местоположения заголовка неверен с одной стороны
header("location view.php");
Должно быть
header("location: view.php");
Тогда это return
за пределами области действия действительно беспокоит меня, смеется. Это выглядит семантически неправильно. Я бы использовал exit
как обычно.
Конечно, это может быть просто опечатка в вопросе, проверяя, что локально я получаю это
Внутренняя ошибка сервера
Сервер обнаружил внутреннюю ошибку или неверную конфигурацию и не смог выполнить ваш запрос.
Обратитесь к администратору сервера по адресу admin @ localhost , чтобы сообщить им о времени возникновения этой ошибки и действиях, которые вы выполнили непосредственно перед этой ошибкой.
Дополнительная информация об этой ошибке может быть доступна на сервере. Журнал ошибок .
Должен ли я связаться с ними и сообщить им об этом J / P
Используйте empty
вместо isset
для проверки логических значений.
$foo = false;
var_dump(isset($foo)); //true - it is set
var_dump(empty($foo)); //true - it is empty
Логически пустым является противоположность isset. Где вы проверяете isset вы проверяете не пустой. Я просто не хотел двойного негатива.
Тогда, если он не определен (либо один не выдаст ошибку)
var_dump(isset($foo)); //false- it is not set
var_dump(empty($foo)); //true - it is still empty
Другими словами, если (эти два условия логически эквивалентны):
$foo = false;
if(isset($foo)) //passes
if(!empty($foo)) //fails
//$foo = false; <-- when its not set
if(isset($foo)) //fails
if(!empty($foo)) //fails (fails if its false and if its not set)
Таким образом, применяя это к вашему коду:
if(isset($_SESSION["comp"])){
header("location view.php");//to redirect to the view page if already logged
return;
}
...
$_SESSION['comp']=false;
Когда вы загружаете страницу в следующий раз, $_SESSION['comp']
имеет значение false, но оно также установлено, поэтому условие if будет выполнено. Однако, если вы используете пустой, он будет вести себя так, как вы ожидаете. Надеюсь, мое объяснение имеет смысл выше, как только вы поймете, как это работает, оно станет очевидным.
Проблема с empty
возникает, когда он используется для проверки таких вещей, как ''
, []
или 0
, так как PHP свободно набирается и будет видеть все это как false и emtpy. Это имеет смысл, если вы действительно думаете об этом. []
- пустой массив, ''
- пустая строка и 0
- пустое число. Но это может сбить вас с толку, если вы думаете empty = isset
, поскольку они делают совершенно разные вещи. Даже если они несколько взаимозаменяемы.
ДРУГИЕ МАТЕРИАЛЫ
Параметр запомнить меня работает только в одном направлении, а именно, для сохранения файла cookie в браузере клиента. Сеанс использует свой собственный файл cookie, по умолчанию используется что-то вроде PHPSESSID (за это мы должны поблагодарить netscape). Чтобы понять, зачем вам нужен файл cookie, вы должны понимать, что каждый запрос к серверу не имеет состояния и является анонимным.
Поскольку нет ни состояния, ни способа (надежно) идентифицировать одного клиента от другого, мы используем cookie. Это просто часть данных, которые говорят, что я - это я, что сервер дает клиенту. Даже если вы никогда ничего не можете доверять клиенту, это дает нам возможность иметь постоянное хранилище на клиенте для клиента, чтобы идентифицировать их.
Вы не можете использовать сессию для запоминания, потому что время жизни сессии короткое, обычно около 30 минут. Кроме того, какой бы смысл, если бы их сессия никогда не заканчивалась, вам никогда не понадобился бы вариант запомнить меня, и мы бы не говорили об этом (текстовые сообщения).
При создании «простой» кнопки «помни меня» нужно учитывать целый ряд проблем безопасности. Многим для меня, чтобы покрыть в посте здесь. Тем не менее, сделать это правильно, на самом деле не намного сложнее, чем сделать это любым другим способом.
Когда-нибудь, когда я соберу свой сайт, я планирую опубликовать полнофункциональную систему пользователя в качестве учебного пособия по ней. Но поскольку PHP5 близится к исчезновению, я был занят, чтобы сделать что-нибудь (кроме исправления старых сайтов).
Приветствие.