【问题标题】:Session variable unavailable in ajax handler ( php script )ajax 处理程序(php 脚本)中的会话变量不可用
【发布时间】:2020-06-20 10:03:54
【问题描述】:

我的目录结构如下:

public_html
    |_ ajax
        |_ test_handler.php
    |_ test.php

我的 test.php 看起来像这样:

session_start();
if(isset($_SESSION["tested"]) && $_SESSION["tested"] == "NO"){
    //unset the session array and destroy current session
    destroyActiveSession();

    //start a new session
    session_start();

    $_SESSION["test_var"] = "Hello world!"
    $_SESSION["tested"] = "YES"
}

test_handler.php 有以下代码(简化):

session_start();
exit($_SESSION["test_var"]);

使用本地环境(XAMPP)并在 google crome 上执行

test.php 页面$_SESSION["test_var"] 工作正常,但在test_handler.php 我收到Undefined index: test_var 错误。我做错了什么???

【问题讨论】:

  • 如果你在每个test.php和test_handler.php中输出session_id(),你得到的会话ID是一样的吗?
  • 你是对的@ShaunE.Tobias 会话 ID 不一样。那为什么??
  • 可能有多种原因。这都是本地的吗?后端是否与前端在同一个域中?你使用负载均衡吗?另外,您如何访问这些文件?直接在浏览器中?通过 AJAX 从 UI?
  • 我使用 XAMPP @ShaunE.Tobias 创建了一个本地环境
  • 好的,你是直接进入浏览器中的“test.php”然后进入“test_handler.php”吗?我觉得您可能需要分享这些文件中的更多内容以帮助调试

标签: php session session-cookies session-variables


【解决方案1】:

在我看来,您最初需要设置该值以确保逻辑测试正常运行

<?php
    #test.php

    session_start();
    /*
        In the original code the session variable was not set before 
        any form of testing.. set an initial value
    */
    if( !isset( $_SESSION["tested"] ) ) $_SESSION["tested"]='NO';


    if( isset( $_SESSION["tested"] ) && $_SESSION["tested"] == "NO" ){
        destroyActiveSession();

        session_start();

        $_SESSION["test_var"] = "Hello world!"
        $_SESSION["tested"] = "YES"
    }
?>

并且在尝试通过 ajax 延迟输出值时进行测试是有意义的

<?php
    #test_handler.php
    session_start();
    $var=isset( $_SESSION["test_var"] ) ? $_SESSION["test_var"] : 'bogus';
    exit( $var );
?>

【讨论】:

    【解决方案2】:

    您的“如果”条件似乎是错误的:$_SESSION["tested"] = "NO"

    试试:

    session_start();
    if(isset($_SESSION["tested"]) && $_SESSION["tested"] == "NO"){
        //unset the session array and destroy current session
        destroyActiveSession();
    
        //start a new session
        session_start();
    
        $_SESSION["test_var"] = "Hello world!"
        $_SESSION["tested"] = "YES"
    }
    

    【讨论】:

    • 抱歉打错了。但我的问题还是一样吗??
    【解决方案3】:

    所以如果有人遇到这个问题,这就是解决我的问题的方法: 新test.php

    session_start();
    if(isset($_SESSION["tested"]) && $_SESSION["tested"] == "NO"){
    
        //unset the session array 
        $_SESSION = array();
    
        $_SESSION["test_var"] = "Hello world!"
        $_SESSION["tested"] = "YES"
    }
    

    还有新的test_handler.php

    <?php
        session_start();
        exit( $_SESSION["test_var"] );
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 2014-10-27
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      相关资源
      最近更新 更多