12
Янв
2017

проверка кук и поисковые роботы (+CSRF +$_POST + потеря $_GET) проверка поддержки сессий

(изменил заголовок вопроса, потому что тема более объемная)


Есть такое (вначале каждой страницы, кроме стр сообщения об ошибке):

function cooki_check() {
@session_start();

if (!isset($_COOKIE['ct'])) {
    //если неустановлена, то устанвоить
    setcookie("ct", 1);
    //и сообщить "обновите стнраницу или вкл куки"
    er(1);
    }
}

При первом обращении к сайту всегда будет такая "проблема". Другие способы проверки пробовал, но такой самый эффективный (и самый тупо-неправильный). Почему именно так? Потому что для некоторых страниц "классический" способ проверки не подходит.

Хотя... кто (что) мешает мне использовать два способа проверки для разных страниц? Ну я еще точно не определился что и как.

Если робот-поисовик будет смотреть на страницу, то сначала он получит страницу ошибки. И если продолжит далее индексировать содержание (при условии что для робота кука установится), то будет все нормально.


Вопрос вот в чем: Не получится ли так, что все страницы сайта будут выглядеть для поискового робота как страница ошибки Обновите страницу или вкл куки в браузере


Почему "классическая" проверка не подходит. Потому что в ней есть редирект на PHP_SELF. Теряются $_GET параметры. Проблему "потери" гет переметров я решил, НО при отключенных куках проверка не всегда срабатывает так как нужно и получается ай-яй-йяй. Ниже то что я обозвал "классической проверкой".

function cooki_check() { 
    @session_start();

    if (!isset($_COOKIE['ct']) and ! isset($_GET['ct'])) {
    //неустановл ни кука, ни гет - первое обращение к странице

    setcookie('ct', 1);
    //установить куку и гет параметр и редир не себя
    header("Location: $_SERVER[PHP_SELF]?ct=1");
    exit;
        } elseif (!isset($_COOKIE['ct'])) {
        //если в первом ифе установлен гет параметр, то это НЕ первое обращение к странице. проверяем куку. если неустаовленна то 100% ошибка.
        er(1);
        //ошибка
   }
}

О потере каких-таких параметров я написал выше: Например пользователь щелкает в почтовом клиенте на ссылке подтверждения регистрации. А в скрипте делается редирект на PHP_SELF. Таким образом гет-переметры, необходимые для подтверждения регистрации пропадают. Но я это как-бэ решил.

Источник: https://ru.stackoverflow.com/questions/613611/%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0-%D0%BA%D1%83%D0%BA-%D0%B8-%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%BE%D0%B2%D1%8B%D0%B5-%D1%80%D0%BE%D0%B1%D0%BE%D1%82%D1%8B-csrf-post-%D0%BF%D0%BE%D1%82%D0%B5%D1%80%D1%8F-get-%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0-%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA

Share

Тебе может это понравится...