【问题标题】:Session data not saving会话数据未保存
【发布时间】:2017-04-14 12:10:50
【问题描述】:

几个月前,我正在调试一个 php 会话,该会话在我上次测试时有效。代码没有任何改变,但会话现在已经停止工作。

我在这里阅读了多个问题以及其他文章,但没有解决此问题的建议。我相信我的代码是正确的,但是当我向 Bluehost 寻求支持时,他们说一定是代码问题:

我正在开始一个会话并设置一些会话变量:

<?php
    session_start();

$_SESSION["franchise_name"] = $_POST["name"];
$_SESSION["db_name"] = $_POST["name"];
$_SESSION["franchise_location"] = $_POST["franchise_location"];
$_SESSION["franchise_phone"] = $_POST["franchise_phone"];
$_SESSION["franchise_address"] = $_POST["franchise_address"];
$_SESSION["franchise_email"] = $_POST["franchise_email"];

header("Location: session.php"); /* Redirect browser */
exit;

?>

如果我在设置会话变量后立即回显它们,一切都很好。好东西。所以我知道这部分一切正常。

session.php 看起来像这样:

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
    session_start();
echo 'Testing Output:';
echo session_status();
echo '<pre>';
var_dump($_SESSION);
echo '</pre>';
phpinfo();
?>

因此,当我对此进行测试时,会话中没有传递任何数据。 session.php 上的输出是:

Testing Output:2
array(0) {
}

我还设置了一个测试器来查看是否启用了会话数据:

<?php
// Start Session
session_start();
// Show banner
echo '<b>Session Support Checker</b><hr />';
if (!is_writable(session_save_path())) {
    echo 'Session path "'.session_save_path().'" is not writable for PHP!<br />'; 
} else {
    echo 'Session path "'.session_save_path().'" is writable for PHP!<br />'; 

}
// Check if the page has been reloaded
if(!isset($_GET['reload']) OR $_GET['reload'] != 'true') {
   // Set the message
   $_SESSION['MESSAGE'] = 'Session support enabled!<br />';
   // Give user link to check
   echo '<a href="?reload=true">Click HERE</a> to check for PHP Session Support.<br />';
} else {
   // Check if the message has been carried on in the reload
   if(isset($_SESSION['MESSAGE'])) {
      echo $_SESSION['MESSAGE'];
   } else {
      echo 'Sorry, it appears session support is not enabled, or you PHP version is to old. <a href="?reload=false">Click HERE</a> to go back.<br />';
   }
}
?>

这个测试的结果表明会话数据在这里也不起作用,并且会话路径确实是可写的。 Phpinfo 显示会话已启用。

还有什么可以帮助我解决此问题的方法吗?谢谢。

更新:我确实尝试使用 ini_set(' session.save_path','SOME WRITABLE PATH'); 但这并没有解决问题。

【问题讨论】:

  • 注意:我将这些确切的文件从 bluehost 复制到 hostgator,它们在那里工作正常。所以它似乎与托管有关,但 bluehost 说这是我要解决的问题。不知道该让他们做什么。
  • 也许您还有其他要求?在特定情况下,我有一个正在启动会话的 404 页面。在我的网站中没有网站图标,我的浏览器正在请求它,并且两个请求到达服务器时出现了不可预知的行为。
  • 上面列出了所有代码——所以我不这么认为?
  • 好的。我已经在我的本地服务器上测试了你的代码,它似乎在这里工作。
  • 这肯定是bluehost的问题,但他们的技术支持不是很支持。

标签: php session session-variables


【解决方案1】:

来自phpsession_start()页面:

注意
要使用基于 cookie 的会话,必须在向浏览器输出任何内容之前调用session_start()

删除session_start()之前的空格,它们被视为输出。


更新:

也可能与会话文件的位置有关,您可以尝试设置一个新的位置:

ini_set('session.save_path','/some/safe/path/to/sessions');
session_start();

确保sessions 具有适当的权限

【讨论】:

  • 感谢 Pedro 的更新 - 我应该在最初的帖子中指出,我确实尝试更改会话路径作为我早期的故障排除测试之一。
  • 您是否尝试过在不重定向的情况下输出$_POST 内容?有内容吗?它是否显示任何错误?
  • 你可能想看看这个问题的最后一条评论:stackoverflow.com/questions/14631033/…
  • 谢谢 - 我已经看到了,但确定文件没有 BOM - 不过我重新保存了文件以确保问题仍然存在。
  • 很抱歉,我真的不知道如何进一步帮助您!
【解决方案2】:

我打电话给 Blue Host - 第二个支持人员比第一个更警觉,并认识到清漆缓存可能会导致问题。我们禁用了它,瞧!固定的。

【讨论】:

    猜你喜欢
    • 2010-09-14
    • 2016-07-31
    • 2012-09-06
    • 2016-08-01
    • 2021-10-16
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    相关资源
    最近更新 更多