两次重新加载页面后会话变量变化为什么?

时间:2014-10-30 08:47:02

标签: javascript php ajax session

Main.php

<?php
session_start();
msgbox("Are you sure?", "confirm");
$Result = $_SESSION['id'] ;
print "<p id='txt'> </p>";
if($Result == 1 )
    echo "Result is true";
elseif ( $Result == 2 ) 
    print "<br><br>Return value is '$Result'";
function msgbox($msg, $type)
{
    if ($type == "confirm")
    {
        print "<script src='Validate.js'></script>";
        print "<script> ret = confirm ('$msg') ;
        if (ret)
            Write_to_variable('1');
        else
            Write_to_variable('2');
        </script>";
?>

Validate.js

function Write_to_variable( value ) 
{
    if (window.XMLHttpRequest) 
    {
        xmlhttp=new XMLHttpRequest();
    }
    else 
    {
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("txt").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","Variable.php?id="+value,true);
    xmlhttp.send(); 
}    

Variable.php

<?php
session_start();
if ( $_GET['id'] ) 
{
    $_SESSION['variable'] = $_GET['id'];
    print $_SESSION['variable'];
}
?>

我想做的是,

从javascript确认框中获取值,并使用Ajax将确认框的返回值存储到php SESSION变量。在Ajax文件中我只分配$_SESSION['id']= $_GET['id']。程序执行后,我从确认框中按OK。它将1分配给id的会话变量。如果我下次按cancel时值不变,当我尝试再次按cancel时,会话值已更改为id为2.什么是问题,任何建议和解决方案都是可以接受的。

我无法找到隐藏在其背后的逻辑。我可以清楚地看到什么是返回以及ajax返回的内容,但是main.php中使用的会话变量在第二次单击后会发生变化。

先谢谢。

2 个答案:

答案 0 :(得分:0)

似乎只是尝试

没有错
  1. 控制台记录您的java脚本参数并检查错误

  2. 使用alert并检查传递给ajax文件的值是什么

  3. 3.在您的ajax文件中使用die()并检查是否存在不匹配。

答案 1 :(得分:0)

我在Drupal上遇到了同样的问题。

会话变量在ajax调用后才保存:当我重新加载页面时,session与我的ajax调用之前相同,只保存第二页重新加载。

我使用Drupal函数drupal_session_commit();

修复它

您可以在https://api.drupal.org/api/drupal/includes!session.inc/function/drupal_session_commit/7.x

下找到的功能代码