Здравствуйте! Есть: windows 7, apache, php, mysql. Все настраивал своими ручками и в самых разнообразных конфигурациях. Суть проблемы: Пытаюсь настроить apache + php с так, чтобы для разных сайтов файлы сессий php были только в своем каталоге. Но они, зараза, дублируются в каждый. Поэтому каждый сайт считает что сессия есть, но естественно верная она лишь для одного сайта, так как другие ожидают другие данные из нее. Делал через: 1. виртуальные хосты одного апача, настроенные на разные порты 2. разные экземпляры апача и пхп, настроенные на разные порты И везде обнаружились свои проблемы. Сейчас использую файл httpd.conf с таким куском (ip/точные пути переименовал ради конспирации ): Код (Text): Listen 80 Listen 81 NameVirtualHost 124.173.109.47:80 NameVirtualHost 124.173.109.47:81 <VirtualHost 124.173.109.47:80> DocumentRoot "E:/WS2/sites/site1/WebRoot" <Directory "E:/WS2/sites/site1"> Order deny,allow Deny from all </Directory> <Directory "E:/WS2/sites/site1/WebRoot"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> php_value session.save_path "E:/WS2/sites/site1/Sessions" </VirtualHost> <VirtualHost 124.173.109.47:81> DocumentRoot "E:/WS2/sites/site2/WebRoot" <Directory "E:/WS2/sites/site2"> Order deny,allow Deny from all </Directory> <Directory "E:/WS2/sites/site2/WebRoot"> Options FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> php_value session.save_path "E:/WS2/sites/site2/Sessions" </VirtualHost> Но если я зашел скажем на сайт2, то и в E:/WS2/sites/site2/Sessions и в E:/WS2/sites/site1/Sessions появляется по файлу с тем же самым именем. Поэтому сайт2 считает что я залогинен и все отлично, а сайт 1 считает, что я залогинен, но в сессии нет нужных ему данных (ну и понятно для сайта1 совсем другое наполнение данных сессии). Мучаюсь уже неделю по вечерам. Какие могут быть источники проблемы, что я упустил?
Упустили то, что ID сессии хранится у клиента в куках, а куки хранятся для того домена, в котором были поставлены. Разные порты, если я не путаю, приводят к тому же. Единственный вариант иметь одну сессию без запар - сайты в доменах третьего уровня (a.site.ru, b.site.ru) и соответствующая настройка кук сессии (cookie domain = ".site.ru"). Ну и для обоих хостов хранить файлы сессии в одном месте.
Если это правда, то это печально. А как сделано на хостингах, у которых IP для группы сайтов один - один вебсервер, но доменные имена к нему привязаны разные? Думаю, там сессии не путаются. Согласитесь, странный момент. Проверил, session.save_path устанавливается для каждого сайта своя, как и надо. Сайты в отдельных каталогах. Сессии тоже. В настройках есть две ветки настроек для разных сайтов, захожу я только на один, файл сессии появляется в двух папках. Мне кажется это диким. Добавлено: MiksIr, да, Вы правы, сделал в файле hosts запись с тестовым доменом для этого же IP и все получилось , сессии в разных папках разные. Однако это плохо, я хотел бы показывать оба сайта, только с разных портов. Был вариант сделать два сервера apache, две копии php и радоваться. Но для mysqli в php приходиться указать путь в переменной среды, в PATH. Однако тогда php будет искаться тот, что в PATH и история повторяется - два файла одной сессии в разных папках даже при отдельно запущенном апаче + пхп для каждого сайта. Все сложно и запутанно Нет ли возможности настроить доступ именно по разным портам к разным сайтам или может это можно сделать в ngnix или другими серверам? Я понимаю, что разделить сайты на одном домене можно было бы храня в одном куки данные об авторизации каждого сайта, просто переносить на нормальный хостинг такой изврат было б тяжело, может кто уже реализовал подобный механизм?
Зачем разные порты то? Чем обычный NameVirtualHost не устраивает? >просто переносить на нормальный хостинг такой изврат было б тяжело Обычно все хостинги позволяют разместить несколько доменов на одном аккаунте
У меня только одно зарегистрированное доменное имя и внешний IP. Хотелось в дополнение к своему сайту показывать клиенту его сайт. Отсюда такие старания.
Третий уровень пойдет? Если доменное имя (второго уровня, как я понимаю) под вашем контролем - создать в нем 3-й уровень не проблема. Т.е. будет www.domain.ru и client.domain.ru