在销毁之前保存会话数据?

时间:2012-02-22 17:43:32

标签: php session session-variables php-5.3

是否可以在销毁之前保存会话数据以用于数据库目的?

例如,我在会话中有以下数据,

// 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?
}

可行吗?

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

答案 2 :(得分:0)

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

如果要存储一段时间或用户的持久数据,则应将其存储在数据库,缓存文件,内存缓存等中。

答案 3 :(得分:0)

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

这不符合您的意图(在取消设置变量时执行)。相反,它只是成功取消设置会话变量并执行// do something部分。