Не могу открыть сессию в PHP

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

PHP message: PHP Warning:  Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct () in Unknown on line 0" while reading upstream, client: 80.113.209.4, server: example.com, request: "GET /api/config/routes?route=%2Fauth%2Flogin HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm/example.com.sock:", host: "example.com", referrer: "https://example.com/auth/login"

Теперь, когда я захожу в каталог /tmp, я начинаю видеть, где что-то идет не так:

-rw-------  1 app1 www-data     0 Apr 20 10:43 sess_5tqsb9cbohto3anslkfiqm9uq6
-rw-------  1 app1 www-data     0 Apr 20 10:41 sess_8ecc8s1ipbb0h1l4b342nfqph2
-rw-------  1 app1 www-data     0 Apr 20 10:43 sess_9b5irh24v059o24c814tf3jol4
-rw-------  1 app1 www-data     0 Apr 20 10:43 sess_velp2nf8jcst5dhe358bciq8b6

Когда пользователь входит в "app1", PHP создает сеанс с "app1" в качестве владельца. Но когда я пытаюсь войти в "app2", он видит, что сеанс уже существует, и пытается открыть его. Теперь очевидно, что это не будет работать, потому что "app2" не имеет разрешения на чтение или запись в сеанс "app1".

Единственная странная вещь в том, что это происходит только на MacBook. Когда я пытаюсь войти в оба приложения на моем компьютере с Linux, он просто открывает другой сеанс с пользователем "app2".

Я использую php5 с nginx и php-fpm. Я использую php сокеты для подключения nginx к php. Оба приложения имеют свой собственный сокет и работают под разными пользователями "app1" и "app2". Поэтому владелец сеанса зависит от приложения, в котором вы входите.

Кто-нибудь знает, почему php пытается использовать тот же сеанс для macbooks, но создает новый сеанс для компьютеров под управлением Windows и Linux? И как бы я решил эту проблему?

Изменить: Возможным решением было бы сделать www-данных владельцем файлов сеанса, но я бы предпочел, чтобы владельцем этих файлов был выделенный пользователь. Так что решение будет оценено. Если решения проблемы не существует, мне придется обратиться к владельцу www-данных.

1 ответ

Таким образом, очевидно, что Laravel4.2 выдает PHPSESSID для всего домена.example.com, который мешает работе "app2.example.com", потому что клиент отправляет куки-файл домена ".example.com" на сервер и ожидает, что сервер получит это сессия. Единственная проблема заключается в том, что этот сеанс был создан для "app1" и недоступен для "app2".

Почему это происходит только с Macbooks, для меня загадка, но по крайней мере я могу понять, почему это происходит сейчас.

Это кажется проблемой в laravel4.2, так как я не могу найти способ изменить это в данный момент (даже не меняя домен в config/session.php). Я также протестировал последнюю версию Laravel, и у нее не было этой проблемы. К счастью для меня, мы выпустим новую версию "app1", основанную на последней версии laravel, через 2 недели, так что до тех пор нам придется решать эту проблему.

Другие вопросы по тегам