session删除问题,求助!!

session删除问题,求助!!

最近在写perl程序,运用了CGI::session模块。由于每次打开一次画面,session纪录就会增加一条,时间长了,数据量也大。。
点logout按钮都是可以通过代码$session->delete();来删除,但是关闭窗口的时候怎么删除啊?怎么获取这timing?javascript??求助哇



QUOTE:
原帖由 chopper7278 于 2008-4-7 16:34 发表
最近在写perl程序,运用了CGI::session模块。由于每次打开一次画面,session纪录就会增加一条,时间长了,数据量也大。。
点logout按钮都是可以通过代码$session->delete();来删除,但是关闭窗口的时候怎么删除 ...

只有一个办法 TimeOut 机制
怎么写呀。。
$session->expire('+30s');
我试过这个貌似没删除。。。help


QUOTE:
原帖由 chopper7278 于 2008-4-7 17:16 发表
$session->expire('+30s');
我试过这个貌似没删除。。。help

这个跟 session 的内部有关系 你设定$session->expire('+30s');后  
超过时间了 虽然session的id在服务端的存储文件里不消失  
但是session其实已经失去作用了
系统会自动删除那些保留在服务器端的文件 即便没有删除也不影响你的安全
服务器端具体什么时间删除 我也不太清楚
问过很多人 都说是跟访问次数等等有关

供你参考
恩恩 对。。消失的只是cookies中的值。如果是按照访问次数来删除的话,感觉也有问题。。。
假如有1个人在开网页,生成了一个新的sessionid文件,这时候第2个人上来开网,正好达到纪录数,session文件里全部清除,那第一个人的session不就被删了么。。他还在用呢。。
头要炸了。。。汗!


QUOTE:
原帖由 chopper7278 于 2008-4-8 15:30 发表
恩恩 对。。消失的只是cookies中的值。如果是按照访问次数来删除的话,感觉也有问题。。。
假如有1个人在开网页,生成了一个新的sessionid文件,这时候第2个人上来开网,正好达到纪录数,session文件里全部清除 ...

你考虑的过多了 删除也是过了时效  才自动删除

时效内 永远不删除


QUOTE:
原帖由 chopper7278 于 2008-4-7 17:16 发表
$session->expire('+30s');
我试过这个貌似没删除。。。help

你在第一个帖子里还说用$s->delete()来的,现在怎么不用了?

[Copy to clipboard] [ - ]
CODE:
       find( \&code )

       find( $dsn, \&code )

       find( $dsn, \&code, \%dsn_args )

       Experimental feature. Executes \&code for every session object stored in disk, passing initialized CGI::Session
       object as the first argument of \&code. Useful for housekeeping purposes, such as for removing expired sessions.
       Following line, for instance, will remove sessions already expired, but are still in disk:

       The following line, for instance, will remove sessions already expired, but which are still on disk:

           CGI::Session->find( sub {} );

       Notice, above \&code didn't have to do anything, because load(), which is called to initialize sessions inside
       find(), will automatically remove expired sessions. Following example will remove all the objects that are 10+
       days old:

           CGI::Session->find( \&purge );
           sub purge {
               my ($session) = @_;
               next if $session->is_empty;    # <-- already expired?!
               if ( ($session->ctime + 3600*240) <= time() ) {
                   $session->delete() or warn "couldn't remove " . $session->id . ": " . $session->errstr;
               }
           }

       Note: find will not change the modification or access times on the sessions it returns.

我的印象里好像有的session实现可以设置一定的几率触发自己去清理过期的session,不过不记得是CGI-session还是php的了
你也可以自己写个程序隔三差五的清理清理

哦,对了。。文件下的所有文件删除怎么弄的?opendir?那session文件没后缀名的。。。
谢谢,思路有了,刚才那位老鼠大哥,我那session文件不是一直打开的阿,登陆进去就生成了,生成了了,没一直开,我试了下所以还是可以删掉的。。