За последние 24 часа нас посетили 17837 программистов и 1614 роботов. Сейчас ищут 1503 программиста ...

Как избежать дублирования сессий в каталогах vhosts

Тема в разделе "Установка PHP", создана пользователем bogachev, 12 фев 2012.

  1. bogachev

    bogachev Активный пользователь

    С нами с:
    12 фев 2012
    Сообщения:
    5
    Симпатии:
    0
    Здравствуйте!

    Есть: windows 7, apache, php, mysql. Все настраивал своими ручками и в самых разнообразных конфигурациях.

    Суть проблемы:
    Пытаюсь настроить apache + php с так, чтобы для разных сайтов файлы сессий php были только в своем каталоге. Но они, зараза, дублируются в каждый. Поэтому каждый сайт считает что сессия есть, но естественно верная она лишь для одного сайта, так как другие ожидают другие данные из нее.

    Делал через:
    1. виртуальные хосты одного апача, настроенные на разные порты
    2. разные экземпляры апача и пхп, настроенные на разные порты

    И везде обнаружились свои проблемы.

    Сейчас использую файл httpd.conf с таким куском (ip/точные пути переименовал ради конспирации ;) ):
    Код (Text):
    1.  
    2. Listen 80
    3. Listen 81
    4.  
    5. NameVirtualHost 124.173.109.47:80
    6. NameVirtualHost 124.173.109.47:81
    7.  
    8. <VirtualHost  124.173.109.47:80>
    9.     DocumentRoot "E:/WS2/sites/site1/WebRoot"
    10.     <Directory "E:/WS2/sites/site1">
    11.         Order deny,allow
    12.         Deny from all
    13.     </Directory>
    14.     <Directory "E:/WS2/sites/site1/WebRoot">
    15.         Options FollowSymLinks
    16.         AllowOverride None
    17.         Order allow,deny
    18.         Allow from all
    19.     </Directory>
    20.     php_value session.save_path "E:/WS2/sites/site1/Sessions"
    21. </VirtualHost>
    22.  
    23. <VirtualHost 124.173.109.47:81>
    24.     DocumentRoot "E:/WS2/sites/site2/WebRoot"
    25.     <Directory "E:/WS2/sites/site2">
    26.         Order deny,allow
    27.         Deny from all
    28.     </Directory>
    29.     <Directory "E:/WS2/sites/site2/WebRoot">
    30.         Options FollowSymLinks
    31.         AllowOverride None
    32.         Order allow,deny
    33.         Allow from all
    34.     </Directory>
    35.     php_value session.save_path "E:/WS2/sites/site2/Sessions"
    36. </VirtualHost>
    Но если я зашел скажем на сайт2, то и в E:/WS2/sites/site2/Sessions и в E:/WS2/sites/site1/Sessions появляется по файлу с тем же самым именем. Поэтому сайт2 считает что я залогинен и все отлично, а сайт 1 считает, что я залогинен, но в сессии нет нужных ему данных (ну и понятно для сайта1 совсем другое наполнение данных сессии).

    Мучаюсь уже неделю по вечерам. Какие могут быть источники проблемы, что я упустил?
     
  2. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Упустили то, что ID сессии хранится у клиента в куках, а куки хранятся для того домена, в котором были поставлены. Разные порты, если я не путаю, приводят к тому же. Единственный вариант иметь одну сессию без запар - сайты в доменах третьего уровня (a.site.ru, b.site.ru) и соответствующая настройка кук сессии (cookie domain = ".site.ru"). Ну и для обоих хостов хранить файлы сессии в одном месте.
     
  3. bogachev

    bogachev Активный пользователь

    С нами с:
    12 фев 2012
    Сообщения:
    5
    Симпатии:
    0
    Если это правда, то это печально. :(
    А как сделано на хостингах, у которых IP для группы сайтов один - один вебсервер, но доменные имена к нему привязаны разные? Думаю, там сессии не путаются.

    Согласитесь, странный момент. Проверил, session.save_path устанавливается для каждого сайта своя, как и надо. Сайты в отдельных каталогах. Сессии тоже. В настройках есть две ветки настроек для разных сайтов, захожу я только на один, файл сессии появляется в двух папках. Мне кажется это диким.

    Добавлено:
    MiksIr, да, Вы правы, сделал в файле hosts запись с тестовым доменом для этого же IP и все получилось , сессии в разных папках разные. Однако это плохо, я хотел бы показывать оба сайта, только с разных портов. Был вариант сделать два сервера apache, две копии php и радоваться. Но для mysqli в php приходиться указать путь в переменной среды, в PATH. Однако тогда php будет искаться тот, что в PATH и история повторяется - два файла одной сессии в разных папках даже при отдельно запущенном апаче + пхп для каждого сайта.

    Все сложно и запутанно :)

    Нет ли возможности настроить доступ именно по разным портам к разным сайтам или может это можно сделать в ngnix или другими серверам? Я понимаю, что разделить сайты на одном домене можно было бы храня в одном куки данные об авторизации каждого сайта, просто переносить на нормальный хостинг такой изврат было б тяжело, может кто уже реализовал подобный механизм?
     
  4. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Зачем разные порты то? Чем обычный NameVirtualHost не устраивает?

    >просто переносить на нормальный хостинг такой изврат было б тяжело
    Обычно все хостинги позволяют разместить несколько доменов на одном аккаунте
     
  5. bogachev

    bogachev Активный пользователь

    С нами с:
    12 фев 2012
    Сообщения:
    5
    Симпатии:
    0
    У меня только одно зарегистрированное доменное имя и внешний IP. Хотелось в дополнение к своему сайту показывать клиенту его сайт. Отсюда такие старания.
     
  6. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Третий уровень пойдет? Если доменное имя (второго уровня, как я понимаю) под вашем контролем - создать в нем 3-й уровень не проблема. Т.е. будет www.domain.ru и client.domain.ru