php - 访问脚本 1、脚本 2 中设置的 session 变量。 PHP

标签 php ajax session

我有一个执行某些操作的循环,在循环内我有一个递增的 session 计数器。这个循环大约需要 10-15 分钟才能完成,所以我想要某种进度条来告诉用户循环已经进行了多远。

我的 AJAX 调用假设检索我在循环内设置的 session 的值,但它似乎不起作用。我收到未定义索引错误。

我在某处读到, session 一旦被一个脚本使用就会被锁定,直到它完成使用它为止,不会解锁它。是否可以强制解锁 session ,以便我的 ajax 脚本可以检索 session 的值?

示例:

脚本 1(循环):

while(SOME CONDITION) {
    //DO ACTIONS

    $_SESSION['progress'] = $currProgress + 1;
}

脚本 2(AJAX 调用检索 session ):

function getCurrentProgress() {
   $progress = isset($_SESSION['progress']) ? $_SESSION['progress'] : 0;
   echo json_encode(array('progress' => $progress));
}

JS AJAX(每 30 秒调用一次)到上述脚本

最佳答案

默认情况下,直到程序结束,PHP session 更改才会写入 session 存储;当程序运行时,$_SESSION 就像任何其他变量一样;只能在其自己的程序中访问;只有当程序结束并将 session 写入磁盘时,下一个程序才能获取您对 session 数据所做的更改。因此,简短的回答是,您无法仅通过检查 session 并期待最新更新来做到这一点。

您可以使用 session_write_close() 函数在程序运行过程中的任何时间强制 PHP 写入 session ,但正如您从函数名称中可以了解到的那样,这也会关闭 session 该程序,以便该程序无法对其进行任何进一步更新。

我想您可以重新打开 session ,但这开始冒险进入危险领域。即使它确实有效,效率也会很低。

最终,PHP session 会像任何其他输出一样写入文件,但重复打开和关闭它会产生大量开销。因此,如果您正在考虑上述情况,请忘记它 - 您也可以让程序将其进度写入临时文件甚至数据库。或者,如果您想要性能,也许可以使用 memcache。

关于php - 访问脚本 1、脚本 2 中设置的 session 变量。 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18593814/

相关文章:

PHP:如何获取数组复选框值,然后将每个单独的结果插入数据库查询?

node.js - Express-session - session 的并发修改

django - Django Session中 '/tmp'的文件路径

php - 使用 Div 显示 MySql 数据

php - Yii 多个表的一个关系

php - 一个表中的字段值可以用作 MySQL 查询中的列名吗?

javascript - 单击时样式切换器跳转到页面顶部

jquery - 同步jquery $.ajax而不锁定IE?

javascript - 加载 angularjs 路由后运行 javascript 代码

javascript - php非登录情况下session超时如何避免?