【发布时间】:2014-05-22 06:03:54
【问题描述】:
我们的开发团队刚刚将一个应用从本地服务器迁移到了实时站点。该应用程序利用可以写入和利用 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_start 和 session_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 负责处理任何可能从后端裂缝中溜走的侥幸行为。
【问题讨论】:
-
发布清理代码
-
假设您正在记录错误,错误日志中有什么内容吗?
$_SESSION['key'] = $value位之后的代码是否运行? -
是的,在第一个 sn-p 之后还有另一个标题行,并且页面正确重定向。我还没有机会打开错误日志记录。
-
当你使用
mysqli_real_escape_string时你连接到db了吗? -
我想是的。调用连接标头,连接没有问题或抛出错误。 (错误报告在inc文件中打开)并且$connect是连接协议。数据也在进入数据库。
标签: php mysql session-variables