会议背后的故事是什么?

时间:2012-01-28 14:31:08

标签: php session

简单来说,我已经有足够的会话,所以这个会话的最佳服务器设置是什么。

示例 假设我们有2个文件[a.php和b.php]

a.php代码

<?php
session_start();
$_SESSION['msg'] = "Hello world";
header("Location: b.php");
exit;
?>

b.php代码

<?php
session_start();
echo $_SESSION['msg'];
unset($_SESSION['msg']);
?>

是的,它可以与你们很多人合作,但我想知道为什么它适用于我在某些主机上使用以下php信息检查

PHP INFO (WORKS) PHP Version 5.3.8 register_globals = On

Example Works

虽然它无效 在我的第二个托管上有以下信息

PHP INFO (NOT WORKS) PHP Version 5.2.17 register_globals = On

Example Not Works and giving 0

为什么? php服务器设置有什么问题,我真的很沮丧,因为我的网站完全依赖这个会话作为提醒:(

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

会话在标头中发送,您将使用Location标头重定向。每个PHP.net,header()函数一次只发送1个头。我认为您在服务器将会话标头发送给用户之前重定向。我可能是错的,所以测试元刷新,看看会发生什么。是的,它已被弃用,但在这里测试效果很好:

echo '<meta http-equiv="refresh" content="0;b.php">';

替换:

header("Location: b.php");

希望对你有用

答案 1 :(得分:1)

会话存储在两个服务器上的文件中(session.save_handler = files)但session.save_path不同:/var/php_sessions表示服务器无法正常工作且“空”&#39;服务器工作正常(/ tmp将被视为默认值)。

/var/php_sessions是否存在并且对于您的Web服务器用户(通常是apache,httpd或www-data)是否可写?您应该在/var/php_sessions中找到会话文件。将会话ID与cookie提供的id匹配。

答案 2 :(得分:1)

另一个错误来源可能是代理干扰。您的第二台服务器正在运行Nginx / Varnish,两者都可以配置为反向代理。

令我恼火的是,第二台服务器对a.php请求的回答以'0'开头。我可以理解b.php打印'0',但为什么a.php应该这样做?

亲眼看看:

0<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">\n
^ <-- this is strange, isn't it?

您确定已上传了正确的a.php吗?

另请注意,请检查您的网络服务器的错误日志。