昨天我搜索了几乎所有关于php会话的主题,我查看了手册,但仍然无法正常工作。因为这个,我熬夜很晚。即使会话ID正确,PHP会话也是空的
情景是:我使用标准的HTML表单登录。我的会话中填充了一些变量,它工作正常。然后我使用闪存uploadify
上传一些照片,并通过参数 - PHPSESSID
。我的PHP脚本不识别会话。它认为它是空的。然后我尝试使用不同客户端的会话,例如Firefox
或Opera
,并且它也是空的。然后我尝试使用不同的Chrome
选项卡和它的工作
正如你看到我唯一的保护是通过IP。我不扫描其他的事情,所以当好PHPSESSID传递也不管客户端类型,版本等
这是init_session.php
,文件的客户端IP是匹配我包括其他文件开始时每次这个应该工作。因此我知道会话ID正在通过Flash传递。但是然后会话是空的。
目录设置在顶部,路径是直接的,所以不应该有任何问题。当保存路径为默认时,它也不起作用。我也转向会话自动启动和会话只使用cookie。除了我需要手动设置cookie之外,它没有改变任何东西。
这里有什么我可以尝试吗?我想我没有选择。
编辑:
我忘了最importat件事,我认为关闭suhosin.session.cryptua
将解决情况,但使用的ini_set我不能把它关掉,还有没有其他的办法吗?看来,这个选项加密会话使用用户代理字段将如此。
ini_set('session.auto_start', '0');
ini_set('session.save_path','/public_html/nowy/tmp');
if (isset($_POST["PHPSESSID"])) {
session_id($_POST["PHPSESSID"]);
} elseif (isset($_COOKIE['PHPSESSID'])) {
session_id($_COOKIE["PHPSESSID"]);
} elseif (isset($_GET["PHPSESSID"])) {
session_id($_GET["PHPSESSID"]);
}
session_start();
setcookie("PHPSESSID", session_id(), time()+3600, "/");
if (!isset($_SESSION['user'])) {
$_SESSION['user'] = 0;
}
if (!isset($_SESSION['initiate'])) {
session_regenerate_id();
$_SESSION['initiate'] = true;
$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}
echo ini_get('session.save_path').'<br />';
echo $_POST["PHPSESSID"];
print_r($_SESSION);
议决
这个问题已经解决了。我无法设置cryptua
,因为我需要复制oryginal php5.ini
并替换一些变量以使其正常工作。
的问题是预期suhosin.session.cryptua
呃......当你只关注技术上必要的基础知识时,你能初始化一个会话吗?如果是,则描述没有所有雾的症状,如果不是,则尝试在另一个之后添加一个技术细节直到问题再次出现。 – Raffael
工作的正常请求和uploadify提出的请求之间有什么区别?例如。你是通过相同的主机名/子域请求脚本吗? – Frode
请参阅更新。我忘了提及,但主要的不同之处在于**用户代理字段**,因为其他浏览器也不工作 – Kaminari