我目前正在努力解决我的某个公司网络应用程序的问题。在生产环境中,我们遇到一个问题,即当一个应用程序在另一个应用程序中拥有会话时,它们无法在一个应用程序中创建会话。我几乎缩小了问题的范围,但我还没有找到解决方案。
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"。
的会话这里唯一奇怪的是,这只发生在macbooks上。当我尝试在我的linux机器上登录这两个应用程序时,它只是打开另一个与用户" app2"的会话。
我用nginx和php-fpm运行php5。我使用php套接字将nginx连接到php。这两个应用程序都有自己的套接字,并在不同的用户下运行" app1"和" app2"。因此,会话的所有者取决于您登录的应用程序。
有谁知道为什么php会尝试为macbooks使用相同的会话,但为Windows和Linux机器创建一个新的会话?我将如何解决这个问题?
修改 一种可能的解决方案是制作会话文件的www-data所有者,但我宁愿让专用用户成为这些文件的所有者。所以一个解决方案将不胜感激。如果没有解决问题的方法,我将不得不使用www-data所有者。
答案 0 :(得分:0)
显然,Laravel4.2为整个.example.com域提供PHPSESSID,干扰“app2.example.com”,因为客户端将“.example.com”域cookie发送到服务器并期望服务器举行那次会议。唯一的问题是此会话是针对“app1”进行的,“app2”无法访问。
为什么这只发生在Macbook上对我来说是一个谜,但我至少可以理解它为什么会发生。
这似乎是laravel4.2中的一个问题,因为我目前找不到改变它的方法(甚至没有通过改变config / session.php中的域)。我还测试了最新版本的Laravel,它没有那个问题。幸运的是,我们将在2周内发布基于laravel最新版本的新版“app1”,所以在此之前我们将不得不处理这个问题。