对PHP会话文件的权限
我有一个domain.com和subdomain sub.domain.com这两个域在linux环境中有属于同一组(usergroup)的不同ftp用户(user1,user2)。最后,我有一个在两个域上使用会话的PHP应用程序(一个是live,另一个是testing environment) 当我访问domain.com而不首先访问sub.domain.com时,PHP会话文件将在默认文件夹/tmp/中创建,具有适当的权限600和user1:usergroup;当我访问sub.domain.com而不首先访问domain.com时,将创建具有权限600和user2:usergroup的文件 除了IE之外,所有浏览器都很好(请不要关注这一点)。我发现,当我访问sub.domain.com并尝试domain.com时,PHP尝试读取同一个会话文件,但没有权限,页面将无限期加载。将文件的所有权更改为user1会使domain.com工作,但会阻止sub.domain.com工作 如何使Apache或PHP为会话创建不同的文件,或使它们可以从两个域访问 附言。 正如我出于某种奇怪的原因所说的,这种情况只发生在IE上,来自PHP的错误消息是: 未捕获的PHP错误:session_start()[function.session start]:打开(/tmp/sess_t1…,O_RDWR)失败:第46行的xxx.PHP文件中的权限被拒绝(13) 第46行是session_start()对PHP会话文件的权限,php,apache,file,session,Php,Apache,File,Session,我有一个domain.com和subdomain sub.domain.com这两个域在linux环境中有属于同一组(usergroup)的不同ftp用户(user1,user2)。最后,我有一个在两个域上使用会话的PHP应用程序(一个是live,另一个是testing environment) 当我访问domain.com而不首先访问sub.domain.com时,PHP会话文件将在默认文件夹/tmp/中创建,具有适当的权限600和user1:usergroup;当我访问sub.domain.
感谢您在这方面的任何建议。不确定这是否是解决问题的最佳方法,但您可以尝试让PHP将会话文件保存在每个域的不同目录中 看看文档 请记住,您必须在初始化会话之前进行设置。
理想情况下,这应该是脚本首先要做的事情之一。不确定这是否是解决问题的最佳方法,但您可以尝试让PHP将会话文件保存在每个域的不同目录中 看看文档 请记住,您必须在初始化会话之前进行设置。
理想情况下,这应该是您的脚本首先要做的事情之一。您确定IE会触发此问题吗 浏览器不能直接访问会话文件,只有PHP(HTTPD)进程可以访问会话文件 我不明白为什么一个浏览器应该在PHP日志中给出与另一个不同的错误消息
我认为您可能正在处理两个不同的问题。您确定IE引发了这个问题吗 浏览器不能直接访问会话文件,只有PHP(HTTPD)进程可以访问会话文件 我不明白为什么一个浏览器应该在PHP日志中给出与另一个不同的错误消息
我认为您可能正在处理两个不同的问题。一个解决方案是将此添加到每个子域的.htaccess文件中:
php_value session.save_path '/path/to/a/writeable/folder'
然后确保每个子域都有权限写入其自己的文件夹。一种解决方案是将其添加到每个子域的.htaccess文件中:
php_value session.save_path '/path/to/a/writeable/folder'
然后确保每个子域都有权限写入自己的文件夹。我刚才遇到了同样的问题。Apache为IE7和IE8返回会话数据的方式似乎有问题,但很可能是因为IE7和IE8以不正确的方式宣布其请求会话数据的域 以下是我的设想: 使用两个域运行Apache 1.3,每个域都有自己的用户帐户:
Domain: mycompany.com
Session path: /tmp/
Webserver user: mycompanycom
Domain: support.mycompany.com
Session path: /tmp/
Webserver user: nobody
以下是正常访问Firefox/Safari/Chrome时发生的情况:
mycompanycom
中创建李>
/tmp/
中创建mycompanycom
中创建李>
/tmp/
中创建第二个会话文件李>
mycompanycom
,因此以用户无人
身份运行的web服务器无法访问该文件。许可被拒绝/tmp/
中创建一个单独的目录,为support.mycompany.com分离存储的会话数据:
mkdir /tmp/mycompany
chown nobody:nobody /tmp/mycompany
php_value session.save_path '/tmp/mycompany'
然后,我将以下内容添加到support.mycompany.com根web目录中的.htaccess
文件中:
mkdir /tmp/mycompany
chown nobody:nobody /tmp/mycompany
php_value session.save_path '/tmp/mycompany'
最后,我删除了/tmp/
中的所有现有会话数据,以确保新的会话路径立即得到使用:
rm -f /tmp/sess_*
就这样!现在IE7和IE8工作正常
我相当肯定这个问题与IE7和IE8如何从Apache请求会话数据有关。他们可能首先请求mycompany.com的会话数据,然后请求support.mycompany.com的会话数据,尽管后者是在地址栏中输入的唯一域。我也遇到了同样的问题。Apache为IE7和IE8返回会话数据的方式似乎有问题,但很可能是因为IE7和IE8以不正确的方式宣布其请求会话数据的域 以下是我的设想: 使用两个域运行Apache 1.3,每个域都有自己的用户帐户:
Domain: mycompany.com
Session path: /tmp/
Webserver user: mycompanycom
Domain: support.mycompany.com
Session path: /tmp/
Webserver user: nobody
以下是正常访问Firefox/Safari/Chrome时发生的情况:
mycompanycom
中创建李>
/tmp/
中创建