PHP使用会话数据创建sess_空文件

PHP使用会话数据创建sess_空文件,php,session,Php,Session,我正在用PHP5.3.5-1ubuntu7.2运行Web服务器Apache/2.2.17,注意到PHP正在/tmp目录中创建sess_null文件。这就导致了会话劫持 在这里;php.ini中的会话部分: session.auto_start Off Off session.bug_compat_42 Off Off session.bug_compat_warn Off Off session.cache_expire 180 180 session.cache_limiter

我正在用PHP5.3.5-1ubuntu7.2运行Web服务器Apache/2.2.17,注意到PHP正在/tmp目录中创建sess_null文件。这就导致了会话劫持

在这里;php.ini中的会话部分:

session.auto_start  Off Off
session.bug_compat_42   Off Off
session.bug_compat_warn Off Off
session.cache_expire    180 180
session.cache_limiter   nocache nocache
session.cookie_domain   no value    no value
session.cookie_httponly Off Off
session.cookie_lifetime 0   0
session.cookie_path /   /
session.cookie_secure   Off Off
session.entropy_file    no value    no value
session.entropy_length  0   0
session.gc_divisor  1000    1000
session.gc_maxlifetime  1860    1860
session.gc_probability  1   1
session.hash_bits_per_character 5   5
session.hash_function   0   0
session.name    PHPSESSID   PHPSESSID
session.referer_check   no value    no value
session.save_handler    files   files
session.save_path   /tmp    /tmp
session.serialize_handler   php php
session.use_cookies On  On
session.use_only_cookies    Off Off
session.use_trans_sid   0   0
这主要是默认值

有没有人遇到过这样的问题,可以帮助我


谢谢

如果文件名为
sess\u null
,这看起来像是
会话id
已设置为
null
。默认情况下,PHP会创建一个文件名,在id前面加上
sess\uu


我会假设(我只能假设因为您没有发布代码),您将会话id设置为代码中的某个地方的
“null”
。设置会话id的函数是。

如何在处理多个站点的服务器上处理此问题

通过将新路径设置为从web根目录返回一个目录,从/tmp保留会话。使其远离/tmp。因此,如果您的web根目录是/home/username/web_root,那么您的会话将在/home/username/sessions中结束,在web可访问路径之外,而不是在/tmp中。 以下假设所有用户可执行文件都处于同一级别!当我每次调用带有mod_rewrite的单个脚本时,这对我来说是可行的

ini_set('session.save_path', realpath(dirname($_SERVER['SCRIPT_FILENAME']) . '/../sessions') );
我做的其他简单的事情: 开始训练,给我一个更好的控制

session_start();
$s =  &$_SESSION;
Authenticate代码只是设置一个标志,我在每次需要auth的操作之前检查该标志

$s['user']['authenticated'] = true;
注销代码会破坏会话:

session_destroy();
注销该网站的所有用户:

rm -f /home/username/sessions/*

不幸的是,情况并非如此。我发现一个对session_id()的调用可能是用空/null参数调用的,但在其周围添加检查并不能解决这个问题。而这似乎是唯一的召唤。问题是,我正在使用旧代码,这些代码刚刚被移动到新的虚拟机上,我无法访问旧的服务器配置,调试这个问题相当困难。提示和建议如果您知道会话存储的位置,您可以转储
会话id()
;在存储/关闭(
session\u write\u close()
)或销毁(
session\u destroy()
)之前。请参见:-我创建了一个与PHP5.2或PHP5.3一起使用的函数,甚至可能是一个早期的PHP版本,PHP5.4有一个内置解决方案。