村头猎户 2012-02-21 13:31:47 3885次浏览 5条回复 0 0 0

因为功能需要, 我项目中使用了自定义的session来判断用户的身份。设置使用CDbSession来管理session信息,timeout属性为10分钟。 session到期后,Yii可以将用户踢下线,但是我自定义的session变量还是存在的并没有unset掉。这样导致的问题就是:比如 A用户时后台管理员,他登陆后,进入到了管理后台页面,10分钟没操作,系统自动从yiisession表中清理其信息,回到登陆界面。我使用B账号再登陆,B账号是普通用户,登陆后应该是在前台首页。可是由于我自定义的Session验证信息没有随着 yiisession表中的数据一起清理掉 导致的 B用户又回到了后台管理页面中。

我现在就想知道我如何才能得到yii设置yiisession表中数据为垃圾数据,或者清理yiisession的时机。我好在这个时机中加入清理自己session的代码。

我找过文档,没有找到我想要的信息。还望各位大牛不吝赐教~

  • 回复于 2012-02-21 13:55 举报

    ChttpSession 中的方法:

    public function add($key,$value)
    {
        SESSION[$_$key]=$value;
    } 
    

    如果我不用这个方法,自己用:
    SESSION[$_$key]=$value;
    语句添加一个session变量, ChttpSession会一起管理起来么?
    我没看到其有什么管理对添加的session变量管理的操作。这样的话,如果session的timeout属性到时间了,CHttpSession 会自动清理掉用 add方法添加的session变量么?

  • 回复于 2012-02-21 14:37 举报

    貌似YII重载了SESSION的读写和销毁操作。。所以你对session的操作也会被YII捕获一并管理的。。。

  • 回复于 2012-02-21 14:38 举报

    到期了应是会清理的,YII的引用执行的第一阶段就有一个步骤是清理到期的session

  • 回复于 2012-02-21 14:41 举报

    遇到的问题就是我添加的变量没有被清理掉~
    我在想,是不是CDbHttpSession 会自动清理这些信息。
    后来发现没有,所以前来请教了~

  • 回复于 2012-02-21 15:20 举报

    session 有个垃圾回收机制的。删掉过期的session文件是有一定的概率触发的。可能通过
    session.gc_probability=1, session.gc_divisor =100 来改

您需要登录后才可以回复。登录 | 立即注册