PHP会话问题

PHP会话问题,php,Php,好的,我的代码应该使用$\u GET['pid']获取页面id,并检查它是否等于$\u会话['page']。如果是,则保留$\u会话['page'],如果不是,则销毁$\u会话['page'] 但是由于某种原因,当我使用include()从另一个页面调用函数时,$\u会话['page']在重新加载时与另一个页面的值不同?导致此问题的原因是什么?如何解决 这是我未设置的$\会话['page']代码 <?php ob_start(); session_start(); if(isset($

好的,我的代码应该使用$\u GET['pid']获取页面id,并检查它是否等于$\u会话['page']。如果是,则保留$\u会话['page'],如果不是,则销毁$\u会话['page']

但是由于某种原因,当我使用include()从另一个页面调用函数时,$\u会话['page']在重新加载时与另一个页面的值不同?导致此问题的原因是什么?如何解决

这是我未设置的$\会话['page']代码

<?php
ob_start(); 
session_start();

if(isset($_GET['pid']) && is_numeric($_GET['pid'])) {
    if(isset($_SESSION['page']) && $_SESSION['page'] !== $_GET['pid']){
        unset($_SESSION['page']);
    }

    $page = mysqli_real_escape_string($mysqli, htmlentities(strip_tags($_GET['pid'])));
    $_SESSION['page'] = $page;
}

ob_flush();
?>

我从另一个脚本调用这个函数

<?php
ob_start(); 
session_start();
function getRatingText(){
    $dbc = mysqli_connect("localhost", "db", "pass", "members");
    $sql1 = "SELECT COUNT(ab_g.u_ab_id) FROM ab_g INNER JOIN u ON ab_g.user_id = u.user_id WHERE u_ab_id = '" . $_SESSION['page'] . "' AND u.active IS NULL AND u.deletion = 0";
    $result = mysqli_query($dbc,$sql1);

    if (!mysqli_query($dbc, $sql1)) {
            trigger_error(mysqli_error($dbc));
            return;
    } else {
        while($row = mysqli_fetch_array($result)) {
            $tr[] = $row[0];
        }
    }

    if(isset($tr) && count($tr) != 0){ $rat = array_sum($tr); }

    $sql2 = "SELECT g.rate_points FROM g INNER JOIN ab_g ON g.id = ab_g.rate_id INNER JOIN u ON ab_g.user_id = u.user_id WHERE ab_g.u_ab_id = '" . $_SESSION['page'] . "' AND u.active IS NULL AND u.deletion = 0";
    $result = mysqli_query($dbc, $sql2);

    if(!mysqli_query($dbc, $sql2)) {
        trigger_error(mysqli_error($dbc));
        return;
    } else {
        while($row = mysqli_fetch_array($result)) {
            $trp[] = $row[0];
        }
    }

    if(isset($trp) && count($trp) != 0){ $tot = array_sum($trp); }

    if (!empty($tot) && !empty($rat)){
        $avg = round($tot / $rat, 1);
        $percent = round(($avg / 5) * 100, 1);
        $votes = $rat;
        if($rat == 1){
            echo $avg . "/5  (" . $votes . " rating casted)";
        } else {
            echo $avg . "/5  (" . $votes . " casted)";
        }

        if($avg <= 5){ $rate = '5 star'; }

        if($avg <= 4){ $rate = '4 star'; }

        if($avg <= 3){ $rate = '3 star'; }

        if($avg <= 2){ $rate = '2 star'; }

        if($avg <= 1){ $rate = '1 star'; } 

        echo $rate;

    } else {
        echo 'not rating';
    }   
  return TRUE;
}

ob_flush();
?>



我通过将
session_write_close()放置在位于底部的函数脚本内部。在ob_flush()之前。

尝试执行
unset($\u会话['page'])如果pid无效:

if(isset($_GET['pid']) && is_numeric($_GET['pid'])) {
    ....
} else {
    unset($_SESSION['page']);
}

ob\u start()和ob\u flush()
仅当您的http头有问题时才应使用。

您的文件中有session\u start吗?
$\u会话['page']
什么时候不同,当使用有效的“pid”或不使用有效的“pid”访问页面时?@Scrum-Meister在我转到另一个页面时会有所不同,
但是当我重新加载同一页面时,它会因为某种原因而更改?
会更改为不同的pid,或者更改为其他内容,例如“null”?如果问题得到解决,然后接受回答。如果给出的答案没有解决您的问题,那么您自己回答并接受该答案。我仍然会遇到同样的问题。@PHPFREAK您检查pid的地方(在您问题的第一个代码框中)@Scrum-Meister,出于某种原因,当我删除
ob_flush()时从主页页脚开始工作,我删除
ob_flush()是个好主意吗。您对删除
ob_flush()有何意见
@PHPFREAK首先执行的是
getRatingText
函数或
ob\u flush()
@Scrum-Meister,getRatingText应该首先执行,但我认为从ajax加载需要时间。