我正在调试几个月前我上次测试时运行的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(&#39; session.save_path&#39;,&#39;一些可写的路径&#39;); 但这并没有解决问题。
答案 0 :(得分:0)
来自php session_start()页面:
注意强>:
要使用基于Cookie的会话,必须在向浏览器输出任何内容之前将session_start()
称为。
删除session_start()
之前的空格,它们被视为输出。
<强>更新强>
它也可能与会话文件的位置有关,您可以尝试设置新位置:
ini_set('session.save_path','/some/safe/path/to/sessions');
session_start();
确保sessions
具有相应的权限
答案 1 :(得分:0)
我打电话给Blue Host--这第二个支持人员比第一个人更警觉,并认识到Varnish缓存可能导致问题。我们禁用了它,瞧!固定。