为什么我的SESSION数组在一个页面上可以正常但在另一个页面上为空?

iam*_*esy 0 php session-variables

我有一个设置各种会话变量的类.在设置会话变量后,我执行了一个SESSION的var转储并获得它们的输出.到目前为止都很好.然后我导航到另一个页面.

session_start(); // i call this right after opening the php tag
var_dump($_SESSION); // i call this after setting the variables
Run Code Online (Sandbox Code Playgroud)

这次它是空的?

设置我的会话

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC))
    {
           $_SESSION['atid'] = $row['autotaskid'];
           $_SESSION['bmsid'] = $row['bmsid'];
           $_SESSION['shavlikid'] = $row['shavlikid'];
           $_SESSION['cpid'] = $row['cpid'];
    }
Run Code Online (Sandbox Code Playgroud)

试图在另一个页面上使用变量

$autotaskid = $_SESSION['atid'];
    $tsql = "SELECT COUNT(tblBackupArchive.StatusID) AS total, tblBackupArchive.StatusID ".
            "FROM tblBackupArchive INNER JOIN ".
            "tblBackup ON tblBackupArchive.BackupID = tblBackup.BackupID ".
            "GROUP BY tblBackupArchive.StatusID, tblBackup.ClientID ".
            "HAVING (tblBackup.ClientID = " . $autotaskid . ")";    
Run Code Online (Sandbox Code Playgroud)

结果是

Undefined index: atid in C:\Program File...
Run Code Online (Sandbox Code Playgroud)

我已经确定我发出了start_session(); 在使用它们的每个页面上运行任何其他代码之前的函数.

另一个重点:调用方法的php页面在iframe中设置变量.当我在新的标签/窗口中打开页面时,它会正确设置会话.这几乎就像主窗口有会话变量,然后每个iframe保持独立.

有任何想法吗?

比利

You*_*nse 6

有任何想法吗?

是.您必须学会调试代码.
正如您所看到的,您的问题无法通过猜测来回答.所以,现在是手工的时候了.

  • 首先确保您可以看到发生任何错误.只需添加一个有意的,然后看看.如果您没有看到任何错误,则必须将其打开.
  • 然后制作一个测试脚本,看看你的会话是否有效

    <? 
    session_start(); 
    if (!isset($_SESSION['counter'])) $_SESSION['counter']=0;
    echo "Refreshed ".$_SESSION['counter']++." times.<br>
    <a href=".$_SERVER['PHP_SELF'].'?'.session_name().'='.session_id().">refresh</a>"; 
    ?>
    
    Run Code Online (Sandbox Code Playgroud)

如果有效,请使用cookies

<? 
session_start(); 
if (!isset($_SESSION['counter'])) $_SESSION['counter']=0;
echo "Refreshed ".$_SESSION['counter']++." times.<br>
<a href=".$_SERVER['PHP_SELF'].">refresh</a>"; 
?>
Run Code Online (Sandbox Code Playgroud)

如果它也有效,你必须检查你的代码.
打印变量,减少代码等

  • @YourCommonSense这不仅是代码风格,还需要启用[short_open_tag](http://www.php.net/manual/en/ini.core.php#ini.short-open-tag). (2认同)