如果register_globals设置为off,我如何使用会话?

时间:2010-01-21 19:14:35

标签: php session

出于安全原因,register_globals设置为关闭。 这很糟糕,因为现在我真的可以使用会话了。

你们如何解决这个“问题”?

更新

我尝试过使用$ _SESSION,但它没有用。这就是为什么我认为它与register_globals关闭有关。

在我的头文件中,我有以下代码:

session_start();
if (!isset($_SESSION['test'])) {
  $_SESSION['test'] = "Foo bar";

现在,在我的头文件中的任何地方,我都可以输出$_SESSION['test']

的内容

但是我无法从例如输出相同的内容page.php文件。

以下是使用Wordpress的示例:example.php

//Include the header file
<?php get_header(); ?>

  Here is some text, and this is my session: <?php echo $_SESSION['test']; ?>

<?php get_footer(); ?>

这将导致会话空白。

6 个答案:

答案 0 :(得分:5)

答案 1 :(得分:3)

使用超全局$ _SESSION数组来存储值。它的内容存储在请求之间,并且无缝地序列化和反序列化 - 不用担心存储对象或数组。一个简单的例子:

<?php

 if (isset($_SESSION['user'])) {
   // user already logged in
 } else {
   // Create a guest user
   $user = new stdClass();
   $user->name = 'guest';
   $user->id = 0;

   $_SESSION['user'] = $user;
 }

?>

答案 2 :(得分:2)

如果您使用 faceook 应用中的 iframe ,您的会话可能无法在 IE safari 中使用。 要使其在这两种浏览器中都可用,请使用下面的标题代码,位于 session_start();

的正上方
  • header('P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"'); // Require to maintian session in IE
  • header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); // Require to maintain session in safari
希望这会有所帮助。

答案 3 :(得分:1)

所有会话变量都在$_SESSION array中。使用$_SESSION['var']代替全局注册的$var

答案 4 :(得分:1)

如果会话不起作用,有几件事需要检查:

  • 确保会话正在启动;如果需要,可以调用session_start() - PHP.ini中有一个可以切换的选项(session.auto_start)。
  • 检查session.save_path是否指向可写的有效位置 - 检查权限。在Windows下,默认设置是该平台的无效路径。
  • 检查PHP错误日志中的指针,以防出现问题。
  • 检查浏览器是否阻止会话cookie。

您可以查看前面提到的session.save_path来检查是否正在创建会话文件。

我假设使用默认的基于文件的会话处理程序。如果使用其他东西(需要额外配置),则可能会有进一步的故障排除步骤。

答案 5 :(得分:0)

你正在使用IIS网络服务器吗? 与旧的IIS版本和php4有类似的“奇怪”问题。检查php.ini中的session.save_path并确保您的Web服务器具有对session.save_path中配置的目录的写访问权。