Plesk + Apache + PHP(FastCGI):持续的会话权限问题,HTTP / HTTPS之间的冲突

我刚把一些网站移到一台全新的服务器上,运行Apache 2.2.3,PHP 5.3和Plesk 10.1.1。 我遇到了PHP会话的文件权限问题,这些会话存储在/var/lib/php/session

我原来为这个文件夹设置权限是这样的:

 drwxrwx--- 2 apache psacln 8192 Mar 22 23:25 session 

这工作得很好, HTTP会话。 文件被保存在具有以下权限的文件夹中:

 -rw------- 1 client1 psacln 0 Mar 22 23:24 sess_507... -rw------- 1 client2 psacln 0 Mar 22 23:25 sess_8o1... 

但问题是,通过HTTPS访问的PHP脚本似乎不是由同一个client1client2用户运行的。 我删除了会话目录中的文件,并通过HTTPS访问了一个login页面,以查看在通过此协议启动时如何保存会话:

 -rw------- 1 apache apache 0 Mar 22 23:25 sess_507... 

因此,无论出于何种原因,使用HTTPS浏览的客户端发起的会话都由apache:apache保存,而来自HTTP客户端的会话则使用someclient:psacln客户端保存someclient:psacln

我想问一下:

  1. 如何避免会话权限的这个问题? 当通过未encryption的HTTP创build会话并且客户端访问该站点的HTTPS部分时,将显示权限错误,因为apache:apache尝试访问由某个客户端创build的会话保存someclient:psacln 。 反过来也是如此。
    1. 我可以通过Plesk或命令行更改运行Apache HTTPS服务器的用户吗?
    2. 如果没有,我可以用rw-rw----权限保存PHP会话,然后将apache添加到psacln组中?
    3. 任何其他build议如何解决这个问题?

改变你的/etc/php.ini文件:

 session.save_path = "0;0660;/var/lib/php/session" 

PHP 5.3.5 mabe会将会话文件保存为-rw-r--如果是的话,那么你需要编辑你的应用程序,而不是只使用start_session()代码:

 usermod(0); start_session(); 

那么它将使用-rw-rw--权限保存会话文件。

你也需要把你的apache组更改为psacln(你的服务器可能运行的是apache:apache,因为有些apache已经更新了configuration文件)。

编辑你的httpd.conf

从:

 user = apache group = apache 

至:

 user = apache group = psacln 

现在,如果您从mod_php更改为FastCGI并返回,则不会与您的会话权限发生冲突。

更改/etc/init.d/httpd restart后,不要忘记重新启动apache服务器

如果您使用的是debian发行版,您的守护进程命令将会是/etc/init.d/apache restart ,您的configuration文件将位于同义文件夹(如/etc/php/apache/php.ini/etc/apache/httpd.conf/etc/apache/apache.conf