我想在页面关闭,也就是session失效的时候,添加一条用户退出的日志..
网上有php session的监听代码,可是不知道放在哪里,怎么使用....session_set_save_handler $SESSION_LIFE = get_cfg_var("session.gc_maxlifetime");
//$SESSION_LIFE = 1440;function sess_open ($save_path, $session_name)
{
    global $sess_save_path, $sess_session_name;    $sess_save_path = $save_path;
    $sess_session_name = $session_name;
    return(true);
}function sess_close()
{
    return(true);
}function sess_read ($key)
{
    global $sess_save_path, $sess_session_name, $SESSION_LIFE, $sqlca;    $query = "SELECT session_value FROM ts_sessions WHERE session_key = '$key' AND session_expiry > " . time();
    //echo "query='$query'<br>";
    $sqlca->query($query);    if ($sqlca->next_record())
    {
        return $sqlca->f(0);
    }
    else
    {
        return("");
    }
}function sess_write ($key, $val)
{
    global $sess_save_path, $sess_session_name, $SESSION_LIFE, $sqlca;
    $expiry = time() + $SESSION_LIFE;
    //$value = addslashes($val);
    $value = $val;    $sqlca->query("SELECT session_key,session_expiry FROM ts_sessions WHERE session_key='$key'");
    if($sqlca->next_record())
    {
        $query = "UPDATE ts_sessions SET session_value = '$value', session_expiry = $expiry WHERE session_key = '$key' AND session_expiry > " . time();
    }
    else
    {
        $query = "INSERT ts_sessions VALUES('$key', '$value', $expiry)";
    }    //echo "query='$query'<br>";
    $sqlca->query($query);    return $sqlca->Query_ID;
}function sess_update_time ($key)
{
    global $SESSION_LIFE, $sqlca;    $expiry = time() + $SESSION_LIFE;    $query = "UPDATE ts_sessions SET session_expiry = $expiry WHERE session_key = '$key'";
    return $sqlca->query($query);
}function sess_destroy ($key)
{
    global $sqlca;    $query = "DELETE FROM ts_sessions WHERE session_key = '$key'";
    $sqlca->query($query);    return $sqlca->Query_ID;
}function sess_gc ($maxlifetime)
{
    global $sqlca;    $query = "DELETE FROM ts_sessions WHERE session_expiry < " . time();
    $sqlca->query($query);    return $sqlca->Query_ID;
}session_set_save_handler ("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
session_start();

解决方案 »

  1.   

    session_start();
    session_set_save_handler ("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");session_set_save_handler中每个参数都是对应session每个事件的处理函数,比如要处理session关闭事件,你应该有一个函数叫做sess_close,在这个函数里面处理要做的事情。代码放在程序已开始就可以了。
      

  2.   

    哦,这样啊,
    那么那一大段代码要单独写在一个php页面里么?
    另外在sess_close还能使用$_SESSION["username"]这样的原来session里的参数么?
      

  3.   

    你可以写在单独文件中,然后include进来。sess_close可以使用$_SESSION["username"],因为这个事件发生在session关闭前,session还是有效的。
      

  4.   

    $SESSION_LIFE = get_cfg_var("session.gc_maxlifetime");
    这一句报错了,是什么意思啊?
    syntax error, unexpected T_VARIABLE 
      

  5.   

    这不是 session监听,而是自行处理 session 行为的代码
    注意这个代码是将 session 保存于数据库时用的其中 sess_close 函数只在显式的执行了 session_destroy 或 session_unset 事被调用, 你给出的代码中只返回了 true,没做其他事情sess_gc 函数完成的是垃圾清理过程,可在此添加你对失效 session 的处理代码
      

  6.   

    恩,刚刚的错误时因为第一句session_set_save_handler没有加分号,现在没有报错了..我再试试...另外..真的很感谢CunningBoy 和 xuzuning 两位大哥...你们帮我解决了很多问题...
    你们的存在是像我这样的新手的幸福...诚心感谢你们!!!