未定义的变量:_SESSION通过JavaScript触发器发送变量时

时间:2011-08-29 23:06:36

标签: php session

在我的index.php文件中,我调用session_start()并设置了几个会话变量。在第二个PHP文件中,我想访问这些会话变量。

事实上,这个PHP文件纯粹是一个后端脚本,并在触发JavaScript函数时被POST。当POST调用尝试执行第二个PHP文件中的脚本时,错误日志报告:

  

_SESSION是一个未定义的变量。

我尝试在第二个PHP文件的顶部调用start_session()session_regenerate_id(),但问题仍然存在。

我假设发生的事情是因为它在POST中这个PHP文件在它自己的会话中,因为我仍然可以执行此操作$_COOKIE[ini_get('session.name')]

我试图传递给第二个PHP文件的信息不是任何需要保护的信息,但将来很高兴知道如何做到这一点:通过POST调用PHP文件仍然有我的会话变量。

8 个答案:

答案 0 :(得分:54)

关于POST请求和会话没有任何特别之处 您只需要在每个 文件的顶部调用session_start即可使用会话,就是这样。

再试一次,它应该有用。

答案 1 :(得分:6)

session_start();  

是这样的大多数主题的答案。我一直在努力解决这个问题,我用这个代码解决了我的问题

    if (version_compare(PHP_VERSION, '5.4.0', '<')) {
        if(session_id() == '') {session_start();}
    } else  {
       if (session_status() == PHP_SESSION_NONE) {session_start();}
    }

答案 2 :(得分:3)

你必须包括

<?php session_start();?>

在文档的开头,这将启动SESSION ENGINE并使您能够设置会话变量(ie. $_SESSION['var1'], $_SESSION['var2'], etc)

如果您想要从$ _POST获取值,您可以通过以下方式将两者联系起来:

$_SESSION['var1'] = $_POST['answer1']

答案 3 :(得分:3)

我遇到了这个问题,在尝试了很多东西之后,我只是在第二个脚本上包含了session_start()并且它运行了。

答案 4 :(得分:1)

将以下代码添加到文件browse.php中:

error_reporting( error_reporting() & ~E_NOTICE );
if( ! ini_get('date.timezone') )
{
    date_default_timezone_set('GMT');
}
if (version_compare(PHP_VERSION, '5.4.0', '<')) {
    if(session_id() == '') {session_start();}
} else  {
   if (session_status() == PHP_SESSION_NONE) {session_start();}
}   

它会正常工作。

答案 5 :(得分:0)

我最近也遇到了同样的问题。我无法访问$ _SESSION变量的内容。

1)这是因为在声明session_start();之前尝试访问$ _SESSION变量。在我自己的情况下,我已经在header.php文件中启动了一个会话。但我在include语句之前访问了$ _SESSION变量。实施例;

<?php
 $username = $_SESSION['username'];
 //do some logical operation!!!
?> 
<?php include("header.php");?>

而不是做这样的事情

<?php include("header.php");?>
<?php
 $username = $_SESSION['username'];
 //do some logical operation!!!
?> 

2)可能导致此问题的另一件事,可能是无法在所有可能需要使用

访问$ _SESSION变量的文件的顶部启动会话
session_start();

希望这有助于任何遇到同样问题的人。虽然这是在晚些时候发生的。

答案 6 :(得分:0)

session_start()就是答案。这是另一种解决方法:

<?php 
if (session_id() == "") 
    session_start();    ?>

这将确保仅在您尚未启用当前会话时才启动新会话。正如其他人所说的,当然要确保把它放在HTML的顶部。

答案 7 :(得分:0)

我遇到了这个问题,尝试了不同的方法,终于找到了解决方案:

PHP区分大小写,在所有php文件中使用$ _SESSION而不是$ _session。 示例:

<?php
session_save_path('tmp/'); (is not optional - it is mandatory)
session_start();
echo $_SESSION["s1"]."<br/>";
echo $_SESSION["s2"]."<br/>";
?>