php session监听

pzzc18 2010-09-15 10:55:13
我想在页面关闭,也就是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();


...全文
276 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
pzzc18 2010-09-15
  • 打赏
  • 举报
回复
还是不行啊..
pzzc18 2010-09-15
  • 打赏
  • 举报
回复
恩,刚刚的错误时因为第一句session_set_save_handler没有加分号,现在没有报错了..我再试试...

另外..真的很感谢CunningBoy 和 xuzuning 两位大哥...你们帮我解决了很多问题...
你们的存在是像我这样的新手的幸福...诚心感谢你们!!!
xuzuning 2010-09-15
  • 打赏
  • 举报
回复
这不是 session监听,而是自行处理 session 行为的代码
注意这个代码是将 session 保存于数据库时用的

其中 sess_close 函数只在显式的执行了 session_destroy 或 session_unset 事被调用, 你给出的代码中只返回了 true,没做其他事情

sess_gc 函数完成的是垃圾清理过程,可在此添加你对失效 session 的处理代码
pzzc18 2010-09-15
  • 打赏
  • 举报
回复
$SESSION_LIFE = get_cfg_var("session.gc_maxlifetime");
这一句报错了,是什么意思啊?
syntax error, unexpected T_VARIABLE
CunningBoy 2010-09-15
  • 打赏
  • 举报
回复
你可以写在单独文件中,然后include进来。

sess_close可以使用$_SESSION["username"],因为这个事件发生在session关闭前,session还是有效的。
pzzc18 2010-09-15
  • 打赏
  • 举报
回复
哦,这样啊,
那么那一大段代码要单独写在一个php页面里么?
另外在sess_close还能使用$_SESSION["username"]这样的原来session里的参数么?
SysThink 2010-09-15
  • 打赏
  • 举报
回复
很好,接分!
CunningBoy 2010-09-15
  • 打赏
  • 举报
回复
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,在这个函数里面处理要做的事情。

代码放在程序已开始就可以了。

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧