会话变量在超时时没有被销毁?

时间:2016-12-23 08:01:03

标签: yii2

我在config

中有以下代码
'user' => [
            'identityClass' => 'common\models\UserCustomer',
            'authTimeout' => 30,
        ],

在30秒不活动之后,我刷新浏览器,退出的帐户显示出现登录链接,但是在我的视图中仍存在从会话显示的某些变量。

以下是我在视图中的部分代码

<?php
                        $lsproduk = Yii::$app->session['produkcart'];
                        //echo "counter awal Yii::$app->session['counter']";
                        if(isset (Yii::$app->session['counter']))
                        {

                            foreach($lsproduk as $key => $produk){

                                if(VwProdukAgent::find()->where(['produk_agen_id' => $produk->produk_agen_id])->andWhere(['is_active_produk_agent' => false])->count() > 0){
                                    unset($lsproduk[$key]);
                                }
                            }

                            Yii::$app->session['produkcart'] = $lsproduk;

                            $lsproduk = Yii::$app->session['produkcart'];

                            Yii::$app->session['counter'] = count($lsproduk);

                            $counter = Yii::$app->session['counter'];
                            //display total product
                            echo "<span class='cart-count'>$counter</span></a>";

                        } 
                    ?>

刷新几次并不能解决问题。

当我正常按下注销按钮时,视图中没有显示变量。

为了您的信息我当前的应用程序是电子商务,超时显示的变量是来自会话的购物车上的总产品。当我正常按下注销时,它会有所不同,当然因为会话在注销方法中被破坏,所以购物车是空的。

有什么不对吗?让我知道。

已更新

然后如何在超时时删除其他会话变量?

1 个答案:

答案 0 :(得分:0)

您可以使用与yii\web\User组件中相同的机制。

  1. 添加参数以保持会话到期时间(如cartExpire)。
  2. 创建购物车时,将此参数添加到会话中,将其设置为当前时间戳加30秒:
    Yii::$app->getSession()->set('cartExpire', time() + 30);
  3. 访问购物车会话时,请检查此参数,如果该参数小于当前时间戳,则表示会话已过期,您可以放弃购物车。
  4. 购物车更新时,请记住在接下来的30秒内再次更新此参数。