【问题标题】:Session not available in Ajax, but in the regular PHP-script会话在 Ajax 中不可用,但在常规 PHP 脚本中
【发布时间】:2012-09-14 19:25:12
【问题描述】:

我目前正在编写一个 ajax 应用程序,它通过会话获取它的一些配置参数。

保存这些参数的 session['apps']['appXY'] 构建在 php-script 中,它提供 js-links,调用 ajax。由于我不希望 session['apps']['appXY'] 消耗资源,当用户不使用 ajax-app 时,我每次都删除 session['apps'] 数组,用户定期调用任何站点/同步方式。

建站顺序如下:

  • session['apps'] 被删除;
  • 包含应用类
  • 在每个应用程序(例如 appXY)中,如果需要 ajax,则构建会话['apps']['appXY'](步骤 3)

  • 站点已构建,加载完成,用户正在调用一些 ajax 功能,这可能取决于会话['apps']['appXY']

现在的问题是,如果在站点构建过程开始时删除了 session['apps'],那么 session-array $session['apps']['appXY'] 在ajax-script 不再存在,尽管它在第 3 步(appXY 的常规 php-script)中被重建 - 并且存在且可用。

如果我也没有删除 ajax 可用的会话,但我不明白,为什么会话在 ajax 应用程序中不可用,因为在重建之前删除它?什么可能导致该会话在常规 php-script 中可用,但在 ajax 中不可用,在删除和重建它之后?

谢谢,杰登

【问题讨论】:

  • 你在说什么资源?除非您在这些应用程序子阵列中将几兆/千兆字节的数据填充到会话中,否则除了一些额外的磁盘使用外,几乎没有“开销”......而且这些天磁盘空间非常便宜。
  • @Marc B 扩展名 f.e. 的数组键$session['apps']['appXY'] 本身最多可以包含 50 个密钥。我实际上认为至少在每个站点上携带它会很多,即使您不再需要它们。最好删除它,不是吗?
  • @Ninsuo 是的,我可以将相关部分放在一起,它来自多个文件...

标签: php ajax session


【解决方案1】:

根据 Ninsuo 的建议,我尝试通过更详细的模型使场景更清晰,包含一些代码:

在主类中,在包含任何模块(应用程序)之前,所有 ajax 会话都被删除:

function get-apps()
{
    unset($_SESSION['ajaxconf']);

    require_once(appXY.php);
    require_once(appABC.php);
}

然后,在类 'appXY.php' 中,会话 '$_SESSION['ajaxconf']['appXY']' 被(重新)填充:

class appXY extends base
{
    function main ( $localconf, $lang ) 
    {
        foreach ($array as $key => $value)
        $_SESSION['ajaxconf']['appXY'][$key] = $value;

        return '<a href="index.php?id=123&param1=234" onclick="ajax-app(234) return false;">click</a>
    }
}

从 '$_SESSION['ajaxconf']['appXY']' 获取值在由 javascript 函数 'ajax-app()' 调用的 ajax 脚本中可以正常工作,只要session 不会在 php 函数“get-apps()”开始时被删除。如果会话被删除,它在 ajax 文件中不可用,即使它已在类“appXY”中再次重新定义,这在删除会话后显然包含在内。对我来说,这没有多大意义,因为会话在“appXY”类中可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-22
    • 2020-06-20
    • 2014-10-27
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多