【问题标题】:how to delete session associated data如何删除会话相关数据
【发布时间】:2010-09-12 10:33:54
【问题描述】:

假设我在 database 中存储了一些 与会话 id 关联的数据。 php 中的会话超时时如何删除数据(我不想用所有垃圾数据填充我的文件服务器。)?

php 中是否有任何回调函数可以调用?

【问题讨论】:

    标签: php ajax session-timeout


    【解决方案1】:

    你可以写php脚本

    <?php
    session_start();
    $query = "DELETE FROM session_data WHERE session_id = '{$_SESSION['session_id']}'";
    // in case you want to read this from ajax as json response
    echo mysq_query($query) ? "true" : "false";
    session_destroy();
    ?>
    

    并使用 JQuery 在 uload 事件上使用 ajax 访问此脚本

    $(window).unload(function() {
        $.get('destroy_session.php', null, function(data, status) {
           // ignore result
        });
    });
    

    【讨论】:

    • 我的印象是它只会破坏会话变量,不会破坏数据库中的数据。是这样吗?
    【解决方案2】:

    每次发出请求时,让会话用户报告回您的数据库。 (不是新行,而是更新他的行,这样你就不会填满你的数据库)。

    然后让 cronjob 或类似的东西清理所有上次报告时间戳早于会话超时值的会话。

    【讨论】:

    • 我关心的是用户关闭窗口后如何操作(可能永远不会回来。)。有可能吗?
    • 那么最后一个report back timer会是旧的,cronjob会清理它。
    【解决方案3】:

    我不知道这本身是否符合回调的条件,但也许您可以利用销毁处理程序在显式会话终止时删除陈旧的数据库信息?

    http://php.net/manual/en/function.session-set-save-handler.php

    【讨论】:

    • 就是这样,销毁处理程序似乎是我一直在寻找的。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 2022-01-03
    • 2012-09-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2013-10-18
    相关资源
    最近更新 更多