免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6918 | 回复: 10
打印 上一主题 下一主题

session删除问题,求助!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-07 16:34 |只看该作者 |倒序浏览
最近在写perl程序,运用了CGI::session模块。由于每次打开一次画面,session纪录就会增加一条,时间长了,数据量也大。。
点logout按钮都是可以通过代码$session->delete();来删除,但是关闭窗口的时候怎么删除啊?怎么获取这timing?javascript??求助哇

[ 本帖最后由 chopper7278 于 2008-4-7 16:45 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-04-07 17:00 |只看该作者
原帖由 chopper7278 于 2008-4-7 16:34 发表
最近在写perl程序,运用了CGI::session模块。由于每次打开一次画面,session纪录就会增加一条,时间长了,数据量也大。。
点logout按钮都是可以通过代码$session->delete();来删除,但是关闭窗口的时候怎么删除 ...

只有一个办法 TimeOut 机制

论坛徽章:
0
3 [报告]
发表于 2008-04-07 17:11 |只看该作者
怎么写呀。。

论坛徽章:
0
4 [报告]
发表于 2008-04-07 17:16 |只看该作者
$session->expire('+30s');
我试过这个貌似没删除。。。help

论坛徽章:
0
5 [报告]
发表于 2008-04-08 15:17 |只看该作者
原帖由 chopper7278 于 2008-4-7 17:16 发表
$session->expire('+30s');
我试过这个貌似没删除。。。help

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

供你参考

论坛徽章:
0
6 [报告]
发表于 2008-04-08 15:30 |只看该作者
恩恩 对。。消失的只是cookies中的值。如果是按照访问次数来删除的话,感觉也有问题。。。
假如有1个人在开网页,生成了一个新的sessionid文件,这时候第2个人上来开网,正好达到纪录数,session文件里全部清除,那第一个人的session不就被删了么。。他还在用呢。。
头要炸了。。。汗!

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

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

时效内 永远不删除

论坛徽章:
0
8 [报告]
发表于 2008-04-08 15:36 |只看该作者
原帖由 chopper7278 于 2008-4-7 17:16 发表
$session->expire('+30s');
我试过这个貌似没删除。。。help


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

  1.        find( \&code )

  2.        find( $dsn, \&code )

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

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

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

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

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

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

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


复制代码


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

[ 本帖最后由 tmp 于 2008-4-8 15:38 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2008-04-08 15:42 |只看该作者
哦,对了。。文件下的所有文件删除怎么弄的?opendir?那session文件没后缀名的。。。

论坛徽章:
0
10 [报告]
发表于 2008-04-08 16:54 |只看该作者
谢谢,思路有了,刚才那位老鼠大哥,我那session文件不是一直打开的阿,登陆进去就生成了,生成了了,没一直开,我试了下所以还是可以删掉的。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP