• 6464阅读
  • 0回复

[PHP]中用数据库存储session的方法 [复制链接]

上一主题 下一主题
离线XChinux
 

只看楼主 倒序阅读 楼主  发表于: 2005-07-30
这里用到了session_set_save_handler()函数,其参数学六个自定义处理Session存取的函数,代码如下(TeamXdb是一个数据库类)

<?php
function sess_open($save_path, $session_name)
{
  global $TeamXdb;

  if (!$sessid = session_id())
  {
      return false;
  }

  $TeamXdb->sql_query("DELETE FROM teamx_session WHERE sesslast < DATE_SUB(NOW(),INTERVAL 30 MINUTE)");

  if (($resultSess = $TeamXdb->sql_query("SELECT sessid FROM teamx_session WHERE sessid = '" . $sessid . "'")) && ($rowSess = $TeamXdb->sql_fetchrow($resultse)))
  {
      $TeamXdb->sql_freeresult($resultSess);
      $TeamXdb->sql_query("UPDATE teamx_session SET sesslast = NOW() WHERE sessid = '" . $sessid . "'");
  }
  else
  {
      $TeamXdb->sql_query("INSERT INTO teamx_session(sessid, sessname, sesslast) VALUES('" . $sessid . "', '" . $_SERVER['REMOTE_ADDR'] . "', NOW())");
  }
  return true;
}

function sess_close()
{
  return true;
}

function sess_read($id)
{
  global $TeamXdb;
  if (!($result = $TeamXdb->sql_query("SELECT sessid FROM teamx_session WHERE sessid = '" . $id . "'")))
  {
      return false;
  }
  $TeamXdb->sql_freeresult($result);
  $resultSess = $TeamXdb->sql_query("SELECT sessdata FROM teamx_session WHERE sessid = '" . $id . "'");
  $rowSess = $TeamXdb->sql_fetchrow($resultSess);
  $sess_data = $rowSess['sessdata'];
  $TeamXdb->sql_freeresult($resultSess);
  return $sess_data;    
}

function sess_write($id, $sess_data)
{
  global $TeamXdb;
 
  if (!($result = $TeamXdb->sql_query("SELECT sessid FROM teamx_session WHERE sessid = '" . $id . "'")))
  {
      return false;
  }
  $TeamXdb->sql_freeresult($result);
  if ($TeamXdb->sql_query("UPDATE teamx_session SET sessdata = '" . $sess_data . "', sesslast = NOW() WHERE sessid = '" . $id . "'"))
  {
      return true;
  }
  else
  {
      return false;
  }
}

function sess_destroy($id)
{
  global $TeamXdb;
  $TeamXdb->sql_query("DELETE FROM teamx_session WHERE sessid = '" . $id . "'");
}

function sess_gc($maxlifetime)
{
  return true;
}

session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
?>
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个