【问题标题】:session variable getting unset after every ajax call每次 ajax 调用后会话变量都被取消设置
【发布时间】:2014-04-27 06:21:30
【问题描述】:

我试图在每个 ajax 调用中修改一个会话变量(以便以后仅从 db 检索新内容),但是一个会话变量 $_SESSION['s'] 在每个 alt 中都未设置。阿贾克斯调用!但是未修改的会话变量 $_SESSION["iuser"] 工作正常。我正在 localhost / wamp 上测试这个并在 npp 中编码。

   <?php
session_start();
//if(isset($_SESSION["s"]))
$in=$_SESSION["s"];
//echo $_SESSION['sid'];
$link=mysql_connect("localhost","root","");
mysql_select_db("secure_scrapbook") or die("Sorry :( Connection Error");
$query="Select data,user,id from public where public=1 && id>'$in' ORDER BY id DESC";
$result=mysql_query($query);
$i=mysql_fetch_array($result);
$_SESSION["s"]=$i["id"];
//echo $_SESSION['sid'];
if(!($_SESSION["s"]==$in))
{echo 0;
echo $in;
echo $_SESSION["iuser"];
echo $_SESSION["s"];
echo "check<br>";
}
?>

--jquery /ajax -----

<script>
        setInterval(function() {
    $.ajax({
 url: "gets.php",
 type : "get" ,
  dataType : 'html',
 success : function(data){
 //$("#public").html(data);}
        $("#public").html(data+$("#public").html()+'-');}
});}, 5000); //5 seconds
 </script>

【问题讨论】:

  • 你确定你没有收到headers already sent吗?我觉得您的 &lt;?php 之前有空格字符,因此会话根本没有开始。
  • 会话没有问题,因为我回显了 session_id 并且每次通话都相同。甚至“用户”会话变量也在回显相同的值!
  • 尝试不使用ajax CALL,直接继续,该php并在那里执行。检查输出。
  • 确保$i["id"] 不为空,也不为空
  • 你应该检查$i["id"]返回的值。

标签: javascript php jquery ajax session


【解决方案1】:

我可以建议你像这样调试你的调用:

<?php
session_start();
if (empty($_SESSION["s"])){
    echo 'EMPTY SESSION ';
    die;
}

$in = $_SESSION["s"];
$link=mysql_connect("localhost","root","");
mysql_select_db("secure_scrapbook") or die("Sorry :( Connection Error");
$query="Select data,user,id from public where public=1 && id>'$in' ORDER BY id DESC";
$result=mysql_query($query);
$i=mysql_fetch_array($result);
if (empty($i["id"])){
    echo 'EMPTY $i';
    die;
}
$_SESSION["s"]=$i["id"];
//echo $_SESSION['sid'];
if(!($_SESSION["s"]==$in))
{echo 0;
echo $in;
echo $_SESSION["iuser"];
echo $_SESSION["s"];
echo "check<br>";
}
?>

每次收到消息 EMPTY SESSIONEMPTY $i 检查:

  • ajax 标头并尝试逐步跟踪您的问题。
  • 数据库中的元素确实有 ID
  • $in 在可能的 ID 的边界内
  • $in 是一个数字

【讨论】:

  • 获得大量的 EMPTY SESSION 。如何进行?
  • 很抱歉,但是在echo 'EMPTY SESSION '; 后面注释掉die; 看看你会得到什么回报。追踪$in 您的会话死亡。真的,这是一个循序渐进的过程:(
【解决方案2】:
<?php
    session_start();
    //if(isset($_SESSION["s"]))
    $in=$_SESSION["s"];
    //echo $_SESSION['sid'];
    $link=mysql_connect("localhost","root","");
    mysql_select_db("secure_scrapbook") or die("Sorry :( Connection Error");
    $query="Select data,user,id from public where public=1 && id>'$in' ORDER BY id DESC";
    $result=mysql_query($query);
    if($i=mysql_fetch_array($result))
    {
        $_SESSION["s"]=$i["id"];
        //echo $_SESSION['sid'];
        if(!($_SESSION["s"]==$in))
        {
            echo 0;
            echo $in;
            echo $_SESSION["iuser"];
            echo $_SESSION["s"];
            echo "check<br>";
        }
    }
    else
        echo "No more Data in table";
?>

试试这个,如果回显“表中没有更多数据”,则表示您的数据库没有任何数据满足您设置的条件。

还有一件事,看到你的代码看起来 $_SESSION["s"] 永远不会等于 $in 所以我猜你不需要使用 if 条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 2016-10-01
    • 2013-02-17
    • 2018-03-16
    相关资源
    最近更新 更多