无法使用PHP正确保存会话中的ID

时间:2017-03-27 06:43:24

标签: php jquery session

我遇到了问题。我试图在每次点击会话时保存不同的ID,但是当我从会话中获取此ID时,始终显示一个id(i.e-the first saved one.)。我在下面解释我的代码。

<?php
foreach ($catdata as $v) {
?>
<div class="col-sm-3">
<a href="javascript:void(0)" class="<?php echo $classarr[$counter];?>" onClick="keepSection('<?php echo $v['id']; ?>');"><?php echo $v['name'] ?></a><!-- activemap1 -->
</div>
<?php
$counter++;
if($counter==4){
    $counter=0;
 }
}

点击锚标记时,相应的ID将通过ajax调用保存到会话中,如下所示。

function keepSection(id){
        var url="common.php?action=savecid";
        $.post(url,{"cat_data":id},function(data){  
            var obj=JSON.parse(data);
            console.log('data',obj);
            if(obj.isData==1){
                var v = jQuery("#fyndspaceownsec").validate({
                });
                if (v.form()) {
                    $(".frm").hide("fast");
                    $("#sf2").show("slow");
                }
            }
        })

      }
  

的common.php:

$action = $_REQUEST['action'];
$result=array();
if($action=='savecid'){
    $id=$_POST['cat_data'];
    session_start();
    if(isset($_SESSION['cid']) && !empty($_SESSION['cid'])){
        unset($_SESSION['cid']);
        $_SESSION['cid']=$id;
        $flag="true";

    }else{
        $_SESSION['cid']=$id;
        $flag="false";
    }
    $result=array("isData"=>1,"cid"=>$_SESSION['cid'],"flag"=>$flag);
    echo json_encode($result);
}

这里我将id存入session.At每次点击我正在清理会话并存储新的id。当我尝试获取它时,它只显示一个id,每次点击后首先保存。

<div class="fyndspacecategory fyndsheightsubc nano">
<div class="nano-content">
  <?php
    echo $_SESSION['cid'];

?>

我的完整代码如下。

<div class="fynd-space-itms">
<?php
$classarr = array("item-exhibitation maploc", "item-parking maploc", "item-offices maploc", "item-storage maploc");
$sql="select * from category order by id desc";
                                                        $catdata=$dbobj->db_get_data($sql);
$counter=0;
foreach ($catdata as $v) {
?>
<div class="col-sm-3">
<a href="javascript:void(0)" class="<?php echo $classarr[$counter];?>" onClick="keepSection('<?php echo $v['id']; ?>');"><?php echo $v['name'] ?></a><!-- activemap1 -->
</div>
<?php
    $counter++;
if($counter==4){
    $counter=0;
}
}
<button class="btn nextbtnbgdiv open2" type="button">Next <span class="fa fa-arrow-right"></span></button>
<div class="fyndspacecategory fyndsheightsubc nano">
    <div class="nano-content">
      <?php
        echo $_SESSION['cid'];

    ?>
</div>
</div>

此时,当用户点击next按钮时,第二部分div部分将显示并从会话中获取ID。

假设首次点击存储在会话中的id=16echo将打印值16,并在第二次点击存储到会话中的id=17,但这次也是echo值即将到来16这是我的问题。我需要每次点击旧ID将删除并且新ID将存储,并且每次点击后echo应该打印新值。请帮助我。

1 个答案:

答案 0 :(得分:0)

你会使用isset和empty:

session_start();
if(isset($_SESSION['blah']) && !empty($_SESSION['blah'])) {
   echo 'Set and not empty, and no undefined index error!');
}

array_key_exists是使用isset检查密钥的不错的替代方法:

session_start();
if(array_key_exists('blah',$_SESSION) && !empty($_SESSION['blah'])) {
    echo 'Set and not empty, and no undefined index error!');
}
else 
{
 echo "session is not set";
 } 

确保在读取或写入会话数组之前调用session_start。