【问题标题】:Save the session data before being destroyed?在销毁之前保存会话数据?
【发布时间】:2012-02-22 17:43:32
【问题描述】:

是否可以在销毁之前保存会话数据以供数据库使用?

例如,我有以下来自会话的数据,

// start session
session_start();

// init session var
if (!isset($_SESSION['images'])) $_SESSION['images'] = array();

array
  0 => 
    array
      'image_id' => int 1
      'image_title' => string 'test 1' (length=6)
  1 => 
    array
      'image_id' => int 2
      'image_title' => string 'test 2' (length=6)

我想在会话被销毁或浏览器关闭时将其发送到数据库。

if(unset($_SESSION['images']))
{
    // do something?
}

可行吗?

【问题讨论】:

    标签: php session session-variables php-5.3


    【解决方案1】:

    您应该将session_start(); 视为在您的浏览器上创建一个带有与服务器上的会话文件匹配的哈希的单个 cookie,服务器将在您的“会话”处于活动状态时将任何数据放入 $_SESSION,一旦您关闭浏览器,cookie 会从浏览器中丢弃,最终(由 cron 调用的清理)会话文件会从服务器中删除。

    如果您想存储一段时间或用户的持久数据,那么您应该将其存储在数据库、缓存文件、memcache 等中。

    【讨论】:

      【解决方案2】:

      您可以使用设置用户级会话存储功能的session_set_save_handler() 手动管理会话。然后你可以通过session_register_shutdown()处理你的会话关闭。

      以下是对此功能的有趣测试:http://www.rooftopsolutions.nl/blog/160

      【讨论】:

        【解决方案3】:

        【讨论】:

          【解决方案4】:
          if(unset($_SESSION['images']))
          {
              // do something?
          }
          

          这不会按您的预期工作(在未设置变量时执行)。相反,它只会成功地取消设置会话变量并执行// do something 部分。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-12-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-20
            • 1970-01-01
            相关资源
            最近更新 更多