【问题标题】:PHP session woes on live but not localPHP会话问题在现场但不是本地
【发布时间】: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_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 负责处理任何可能从后端裂缝中溜走的侥幸行为。

【问题讨论】:

  • 发布清理代码
  • 假设您正在记录错误,错误日志中有什么内容吗? $_SESSION['key'] = $value 位之后的代码是否运行?
  • 是的,在第一个 sn-p 之后还有另一个标题行,并且页面正确重定向。我还没有机会打开错误日志记录。
  • 当你使用mysqli_real_escape_string时你连接到db了吗?
  • 我想是的。调用连接标头,连接没有问题或抛出错误。 (错误报告在inc文件中打开)并且$connect是连接协议。数据也在进入数据库。

标签: php mysql session-variables


【解决方案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咬了吗?

【讨论】:

    猜你喜欢
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多