2010-01-21 104 views
0

由于安全原因,register_globals设置为关闭。 而这很糟糕,因为现在我真的可以使用会话。如果register_globals设置为off,我该如何使用会话?

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

UPDATE

我一直在使用$ _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(); ?> 

这将导致在一个空的会话。

+7

这不是一个“问题”,这是一个解决方案。对于一个巨大的现实问题。 – ceejayoz 2010-01-21 19:17:45

+0

确保在使用$ _SESSION数组之前调用session_start(),并确保您的文件按正确顺序包含。 IE浏览器,如果page.php包含header.php,确保页面只在$ require('header.php')行后面使用$ _SESSION。 – meagar 2010-01-21 19:28:32

+0

除非你故意忽略了一些PHP标签,否则你应该在浏览器窗口中看到“get_header()”,并且它实际上从未被执行。 – meagar 2010-01-21 19:30:19

回答

1

所有会话变量将在$_SESSION array中。使用$_SESSION['var']而不是全球注册的$var

+0

这就是我的想法。但我上面的例子不起作用。所以我必须错过一些东西.. – Steven 2010-01-21 19:29:28

+0

@Steven:你使用同一个会话吗?查看使用了什么会话ID(请参阅'session_id'函数)。每次通话都需要保持一致。 – Gumbo 2010-01-21 19:34:10

+0

看来我必须在每个将使用会话的文件中添加session_start()。我希望这足以在头文件中设置... – Steven 2010-01-21 19:43:58

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; 
} 

?> 
5
+0

这是我第一次尝试。没有工作。 – Steven 2010-01-21 19:28:02

+0

如果你print_r($ _ SESSION);'? – ceejayoz 2010-01-21 19:32:39

+1

没什么。但是当我在page.php文件的顶部添加session_start()时,它工作正常。令人讨厌的是,我必须在每次使用会话的文件中都包含这一点。我希望这将足以在头文件中设置:( – Steven 2010-01-21 19:42:50

1

如果会议不工作,有几件事情要检查:

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

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

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

+0

hmm ..谢谢。不知道有'session.auto_start'。我不知道我的ISP允许我设置我自己的PHP .ini设置虽然:(但现在我知道我必须在每次使用session之前调用session_start(),我希望在我的头文件中调用这个就足够了 - 因为它每次都被加载。 – Steven 2010-01-21 19:46:09

0

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

2

如果您正在使用I帧faceook应用程序,您的会话可能无法在IE 野生动物园工作。 使它在这两个浏览器可行使用头部代码的下方,略高于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

希望这将有助于。

+1

你有没有这些头文件的引用?他们是相当神秘的! – 2012-09-09 12:16:04

+3

我没有参考,但他们工作。@Rich Bradshaw!如果你找到一个,PLZ与我们分享。 – Saadi 2012-09-27 13:05:11

相关问题