我刚把一些网站移到一台全新的服务器上,运行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脚本似乎不是由同一个client1
或client2
用户运行的。 我删除了会话目录中的文件,并通过HTTPS访问了一个login页面,以查看在通过此协议启动时如何保存会话:
-rw------- 1 apache apache 0 Mar 22 23:25 sess_507...
因此,无论出于何种原因,使用HTTPS浏览的客户端发起的会话都由apache:apache
保存,而来自HTTP客户端的会话则使用someclient:psacln
客户端保存someclient:psacln
。
我想问一下:
apache:apache
尝试访问由某个客户端创build的会话保存someclient:psacln
。 反过来也是如此。
rw-rw----
权限保存PHP会话,然后将apache
添加到psacln
组中? 改变你的/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