Laravel 不会删除/更新会话

Posted

技术标签:

【中文标题】Laravel 不会删除/更新会话【英文标题】:Laravel won't delete/update a session 【发布时间】:2015-04-02 04:28:05 【问题描述】:

我将一个数组存储在会话变量中,我有一个函数可以从数组中删除一个项目,我需要更新会话但是当我尝试 unset() 然后 Session::set() 它没有更新甚至调用 Session::flush() 都不会清除会话。我可以在会话中访问数组,但无法动态更新或删除它。

public static function removeFromCart($product_id)

    $key        =   'shopping_cart_items';
    $items      =   Session::get($key);
    $index      =   array_search($product_id, $items);
    unset($items[$index]);
    Session::set($key, $items); 

还尝试了由上述函数调用的忘记()然后设置():

public static function refreshCartSession($items)

    $key    =   'shopping_cart_items';
    Session::forget($key);
    Session::set($key, $items);

在我的控制器中,当我 dd() Session::get($key) 时,我可以看到特定项目已被删除,但是当我重新加载会话时,似乎回到了前一个数组并且我所做的更改没有效果:

    public function removeItemFromCart()

    $success_message    =   'Cart item has been removed.';
    $fail_message       =   'Failed to remove cart item.';
    $remove_key         =   'car_remove_item';
    if(Input::has($remove_key))
    
        $item   =   Input::get($remove_key);
        ShopProducts::removeFromCart($item);
        return View::make('shop.shopcart')->with('cart_remove_success', dd(Session::get('shopping_cart_items')));      
    
    else
        return View::make('shop.shopcart')->with('cart_remove_fail', $fail_message);

【问题讨论】:

你为什么要用dd 杀死最后一个代码示例中的脚本执行?您需要正确返回视图,以便在框架运行其周期时正确编写会话。提前停止该循环将阻止会话被写入。 er 成功了。我只是 dd() 会话变量,以查看未设置是否已将其删除。我以为我在没有 dd() 的情况下进行了测试,但我猜不是。 【参考方案1】:

只有在整个请求周期发生时才会更新会话,因此如果您在执行期间dd('anything'),请求将保持不变。

【讨论】:

以上是关于Laravel 不会删除/更新会话的主要内容,如果未能解决你的问题,请参考以下文章

用户登录后 Laravel 5 会话不会持续存在

在 laravel 6 中更新会话数组值

laravel 5.3会话访问购物车

Laravel 5.2 - 会话不会在路由更改中持续存在

我的 Laravel 5.2.10 会话不会持续

Laravel 4.1 身份验证会话数据不会跨请求持久化