我试图为我的所有子域名创建一个会话(跨子域名的一个会话)
子域名第一
auth.site.com/session_test.php
session_set_cookie_params(0, '/', '.site.com');
session_start();
echo session_id().'<br />';
$_SESSION['stop']='stopsss this';
print_r($_SESSION);
子域名二
anscript.site.com/session_test.php
session_set_cookie_params(0, '/', '.site.com');
session_start();
echo session_id().'<br />';
print_r($_SESSION);
现在当我访问auth.site.com/session_test.php
我得到了这个结果
06pqdthgi49oq7jnlvuvsr95q1
Array ( [stop] => stopsss this )
当我访问anscript.site.com/session_test.php
我得到了这个结果
06pqdthgi49oq7jnlvuvsr95q1
Array ()
会话 ID 相同!
但会话是空的
经过两天的失败尝试,我终于发现了问题所在
问题出在文件权限上
其他用户无法读取该文件
我的服务器上的会话文件
-rw------- 1 auth auth 25 Jul 11 11:07 sess_06pqdthgi49oq7jnlvuvsr95q1
当我在服务器上执行此命令时
chmod 777 sess_06pqdthgi49oq7jnlvuvsr95q1
我的问题解决了!文件变得可读(anscript.site.com)
那么,如何解决这个问题?如何设置会话文件的默认权限?
这是会话目录的权限
Access: (0777/drwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
答案1
您的 PHP 会话文件必须可由 PHP/Web 服务器读取,但不一定可由所有用户读取(这是一个安全风险)。
要修复此问题,请检查您的 PHP(或带有 mod_php 的 apache)以哪个用户身份运行,然后将所有会话文件(以及包含这些文件的目录,通常是 /var/lib/php/session 或类似目录)的文件所有权设置为该用户。
chown -R user.group /var/lib/php/session
答案2
我发现你的解决方案存在两个问题。
将权限设置为 777 可使它们可执行和可读。如果您希望使文件可由其他人读取,请尝试使用 644 而不是 777。umask
服务器启动时使用的 是控制这一点的因素之一。如果您使用 umask 077 启动服务器,您将获得所看到的行为。存储会话的代码可能会执行相同的操作。
根据您配置 Web 服务器的方式,不同的 Web 服务器可能以不同的用户身份运行。安全站点可能以 auth:auth 运行,而不是以其他服务器运行的 ID 运行。尝试以不同的用户身份创建会话。如果您为所有用户获得相同的所有权,则似乎您正在使用具有setuid
特权的程序来创建会话,而不是始终使用该程序来读取会话数据。
当您使用 HTTP 访问其他网站时,身份验证网站是否需要 HTTPS?如果是,会话安全设置可能会阻止访问。
答案3
考虑 ACL。男人魅力。 VAR=$(md5sum 文件名 | cut -c1-20); attr -s "File.checksum.md5" -V "$VAR" 文件名