PHP会话在现场很难但不是本地的

时间:2014-05-22 06:03:55

标签: php mysql session-variables

我们的开发团队刚刚将应用程序从本地服务器移动到了实际站点。该应用程序利用可以写入并利用MSQLi以及PDO方法的远程数据库来获取数据并将数据推送到数据库。

更新connect .inc文件以获得正确的数据库凭据后,Web应用程序将在后端运行。数据通过表单进入数据库。但是,由于某种原因,未设置会话变量。现在,我留下了邪恶的,几乎是传统的网络开发问题:

  

"为什么它可以在本地服务器上运行,但不能在实际站点上运行?"

我做了一个快速会话测试,其中设置了一个虚拟会话变量并进行了回显,它响起了铃声。设置会话后查询问题。也就是说,在运行查询之后,传递的数据再次被清理并传递给会话变量。以下是一个很好的例子。

if ($query_dummy = $query_putitthere)
{

$_SESSION ['name'] = $name;
$_SESSION ['date of application'] = $date;
$_SESSION ['certifications'] = $certs;
$_SESSION ['address'] = $addr;


header ('Location: next_page.php');

}

就像一个优秀的小PHP开发人员一样,OB_startsession_start都位于PHP文档的顶部,并且他们再次使用相同的代码在本地服务器上工作。我唯一能想到的问题就是当我们更改新数据库的凭据时发生了某些事情,但这并没有太大意义,因为数据正好让数据库正常运行。

我怀疑这是一个PHP配置问题,因为您认为会话和PHP的处理行为无论运行什么版本都必须保持一致。然而,发生了更奇怪的事情。

变量在前端通过msqli_real_escape _string进行消毒。一个例子如下。

$name = mysqli_real_escape_string($connect, $_POST['your_name']);                                   
$date = mysqli_real_escape_string($connect, $_POST['date_of_app']);         
$certs = mysqli_real_escape_string($connect, $_POST['certifs']);

我知道当我说他们在参加会议之前再次消毒时,我可能会说不出话来。实际上,当会议通过后,他们会通过html_enttites在第二页上进行清理。

MSQLi从用户输入和html_entities处理卫生设施的心态是处理可能已经从后端裂缝中滑落的任何吸虫。

1 个答案:

答案 0 :(得分:1)

如果没有办法复制行为,很难找到确切的原因,但这里有一些你可能想要仔细检查的事情:

  • 会话cookie是否会进入浏览器?这是作为HTTP Cookie标头发送的,因此需要在脚本将任何输出发送到客户端之前发生。

  • 浏览器的cookie是否会将其恢复到服务器?在不同的域或子域中编写和读取cookie可能会导致问题。

  • 我们在谈论多少会话数据?我不熟悉存储的会话文件的任何大小限制,但如果你正在调用php.ini的memory_limit事情可能会变得奇怪。

  • 会话文件存储在磁盘上的哪个位置?如果他们进入/tmp,那么像tmpwatch之类的进程是否可以在您有机会再次阅读文件之前运行并查看文件? php.ini中的session GC variables是否过于激进?

  • 您能找到相关会话的文件吗?里面有什么?它的内容应该可以用unserialize()解析,它也是人类可读的。

  • 您的示例显示您正在设置$_SESSION,然后立即执行HTTP重定向。你被this ancient, possibly fixed WebKit bug咬了吗?