Файл cookie для входа в PHP не распознается через пару часов, но тем не менее остается и не может быть заменен даже после удаления - PullRequest
0 голосов
/ 17 мая 2011

Я новичок в PHP, но не программирую в целом, и это поставило меня в тупик на несколько недель.

Я работаю над сайтом, где другие пользователи начнут использовать логин.поэтому я не могу использовать мой обходной путь на этом этапе.

Это код для установки файла cookie.

ob_start();

...

session_register("myusername");

session_register("mypassword");

$cookiename = "loginsuccess";

$ipforcookie = $_SERVER['REMOTE_ADDR'];

$cookiedata = $myusername._.$ipforcookie;

$cookietime = time()+18000;

setcookie($cookiename, $cookiedata, $cookietime, '/', ".example.com");

...

ob_end_flush();

Этот код я использую, чтобы проверить, является ли файл cookie действительным.

if(isset($_COOKIE['loginsuccess'])){

    $arr = explode("_", $_COOKIE['loginsuccess']);

    if(strcmp($arr[1], $_SERVER['REMOTE_ADDR']) == 0){

        require("headerLogged.php");

    }else{

        require("header.php");

    }

}else{

    require("header.php");

}

Он проверяет, есть ли файл cookie, и соответствует ли его IP-адрес, в случае, если кто-то пытается скопировать файл cookie на свой компьютер или базовый файл такого типа.

Проблема заключается в том,Я могу войти, и cookie регистрируется везде, где я проверяю ... около двух часов.Затем веб-сайт прекращает принимать его, и даже после того, как я удалю cookie, он не создаст новый cookie, если я не изменю вызов функции с ...

setcookie($cookiename, $cookiedata, $cookietime, '/', ".example.com");

на

setcookie($cookiename, $cookiedata, $cookietime, '/');

Затем логин и проверка снова работает.Повторяя при необходимости каждые 2 часа.Я больше не могу этого делать, потому что другие начнут использовать этот логин без знания моего кода или доступа к сайту.

Редактировать: Когда я изменил его на более поздний, только сейчас, онможет быть подтверждено, но только на той части сайта, где он был создан (возможно, несколько очевидно).

Я надеюсь, что предоставил вам достаточно информации, и я ценю любую помощь, которую вы готовы оказатьменя, связанных с этой проблемой, потому что я уверен, что даже небольшой объем кода, который я предоставил, показывает мой статус новичка.В любом случае, большое спасибо за ваше время.

Ответы [ 2 ]

1 голос
/ 17 мая 2011

Вы на самом деле используете сеансы PHP? У вас есть session_register() вызовы (которые, кстати, устарели, и их следует избегать), но я не вижу session_start() нигде.

Однако ваша система входа в систему очень несовершенна. Помните, что куки хранятся на стороне клиента. Простое встраивание IP-адреса в cookie-файл никому не мешает. Они могут просто отредактировать cookie на своей стороне, чтобы они соответствовали своему IP-адресу, и boom , они входят в вашу систему.

Вместо этого используйте обычные сессии PHP.

0 голосов
/ 17 мая 2011

Во-первых, session_register() устарело с PHP 5.3.0 и больше не должно использоваться. Вместо этого вы должны использовать суперглобальный $_SESSION. Для получения дополнительной информации см. Справочные страницы PHP.

Также недостаточно просто проверить, имеет ли cookie какое-либо значение, для защиты вашего сайта. Довольно легко подделать cookie в браузере, и содержимое cookie следует рассматривать как любой другой ввод пользователя (что означает, что вы не должны предполагать, что он соответствует вашим ожиданиям, вы не можете быть уверены, что он даже содержит подчеркивание). На основании фиктивного cookie я никогда не получу доступ к каким-либо частям вашего сайта, требующим входа в систему.

Файл cookie может содержать некоторое значение идентификатора сеанса, а сам сеанс затем содержит дополнительную информацию о том, кто вошел в систему (user_id, но без пароля ). Вы также можете использовать cookie-файл, содержащий user_id, и использовать его в качестве дополнительной проверки. Никогда не храните пароль в файлах cookie или сеансах.

...