【问题标题】:Session variable changes after two reloads of the page why?为什么在两次重新加载页面后会话变量发生变化?
【发布时间】:2014-10-30 08:47:01
【问题描述】:

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'];
}
?>

我想做的是,

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

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

提前致谢。

【问题讨论】:

  • print "&lt;scipt src=Validate.js 行上的引号弄乱了。
  • $_SESSION['id']= $_GET['id'] 而不是S_SESSION['id']= $_GET['id']
  • 请进行更改...有什么帮助吗?
  • 你的 ajax 调用工作正常吗??

标签: javascript php ajax session


【解决方案1】:

试一试好像没什么问题

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

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

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

【讨论】:

  • ajax 没有问题,ajax 的返回值。但是在 main.php 中使用的会话变量在第二次单击后会发生变化。
  • 尝试使用两个不同名称的会话并检查是否发生相同情况
【解决方案2】:

我在使用 Drupal 时遇到了同样的问题。

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

我使用 Drupal 函数 drupal_session_commit(); 修复它

您可以在https://api.drupal.org/api/drupal/includes!session.inc/function/drupal_session_commit/7.x下方找到功能代码

【讨论】:

    猜你喜欢
    • 2014-02-12
    • 2016-05-12
    • 2018-05-08
    • 2016-07-07
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    相关资源
    最近更新 更多