Три даблв и деревянные грабли

    Если кто уже сталкивался с проблемами кукисов для хоста с www и без него, можете сэкономить хабровремя и по ссылке не

    … я вот, не сталкивался раньше и, более того, не ожидал такого подвоха от огнелиса.

    А проблема выглядит так: для www.host.ru и host.ru при старте сессии в том же PHP Firefox создаёт разные куки (содержащие разные session_id)

    Заметил я это, когда прикручивал каптчу к форме.
    Путь к картинке-скрипту содержал www в имени хоста, скрипт создавал картинку и запихивал символы в переменную сессии, но совсем не той (без www), которой далее суждено получить данные формы и проверить правильность угадывания искорёженных символов.
    IE при этом исправно отрабатывал.

    Решение выбрал простое — убирать www мод_реврайтом:
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^www.host.ru$ [NC]
    RewriteRule ^(.+)$ host.ru$1 [L]


    Надеюсь, что помог кому-нибудь обойти грабли.

    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 12

      +3
      А ещё проще ставить куку с полем domain=.domain.tld
        0
        Ваша правда - нашёл session_set_cookie_params в PHP
          0
          Итого уже два способа :).
        0
        Кстати, это удобно, например, когда вы хотите иметь сквозную аутентификацию для всех субдоменов своего ресурса. У меня таким образом реализуется аутентификация на http://www.metallibrary.ru, которая работает и на anathema.metallibrary.ru, и на metallibrary.ru, и на других вариантах обращения.
          +1
          Описанный в заметке вариант подходит только для www и без www, z1nkum описал единственное правильное решение, так как поддоменов может быть масса, например, #city#.domain.com где #city# - варьируется.

          Так же описанный способ требует внимательности - нужно посмотреть каких страниц в индексе поисковой системы больше с www или без.

          И в дополнение я бы рекомендовал поставить флаг 301 редиректа, которые обозначает, что страницы "переехали окончательно":
          RewriteCond %{HTTP_HOST} ^domain\.ru$ [NC]
          RewriteRule ^(.*)$ http://www.domain.ru/$1 [L,R=301]
            0
            А у меня не получается =( Заместо host.ru написал свое, не работает. В чем залёт?
            mod_rewrite есть
              0
              может .htaccess не обрабатывается?
              другие инструкции работают?
                0
                да нет, вроде работает
                кодировку ставит, индекс обрабатывает
                у меня домен 3 уровня, т.е. xxx.xxx.ru
                я пишу
                -------
                RewriteEngine on
                RewriteCond %{HTTP_HOST} ^http://www.xxx.xxx.ru$ [NC]
                RewriteRule ^(.+)$ http://xxx.xxx.ru/$1 [L]
                -------
                захожу на http://www.xxx.xxx.ru - адрес так и остается с www
                  0
                  чей хостинг?
                    0
                    Местная контора. Да инструкции точно обрабатываются ) Но не работают )
                    Я все правильно вообще пишу?
                    {HTTP_HOST} не нужно ни на что менять?
                      0
                      да, всё верно
                      попробуйте добавить дебаг:

                      RewriteLog /usr/local/apache/logs/mod_rewrite_log
                      RewriteLogLevel 9

                      вот ссылка на шпаргалку по mod_rewrite:

                      http://www.ilovejackdaniels.com/mod_rewr…
                    0
                    RewriteCond %{HTTP_HOST} ^www\.xxx\.xxx\.ru$ [NC]
                    т.е. без http://

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

              Самое читаемое