Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每次使用时,php laravel中的会话都会不断重置_Php_Laravel_Session - Fatal编程技术网

每次使用时,php laravel中的会话都会不断重置

每次使用时,php laravel中的会话都会不断重置,php,laravel,session,Php,Laravel,Session,嗨,伙计们,当我尝试使用php中的会话进行购物车时,我遇到了问题,我用下面的代码进行了解释 class Cart { public $items; public $totalQty=0; public $totalPrice=0; public function __construct($oldcart) { if ($oldcart){ $this->items=$oldcart->items;

嗨,伙计们,当我尝试使用php中的会话进行购物车时,我遇到了问题,我用下面的代码进行了解释

class Cart
 {

     public $items;
     public $totalQty=0;
     public $totalPrice=0;

     public function __construct($oldcart)
   {
    if ($oldcart){
        $this->items=$oldcart->items;
        $this->totalQty=$oldcart->totalQty;
        $this->totalPrice=$oldcart->totalPrice;
    }
}

public function add($item , $id){

    $storeditem=['qty'=>0,'price'=>$item->price,'item'=>$item];
    if ($this->items) {
        if (array_key_exists($id, $this->items)) {
            $storeditem = $this->items[$id];
        }}
    $storeditem['qty']++;
    $storeditem['price']=$item->price*$storeditem['qty'];
    $this->items[$id]=$storeditem;
    $this->totalQty++;
    $this->totalPrice+=$item->price;
}}
这是一个简单的类,用于将物品添加到购物车中,我使用它的方式如下

public function getAddToCart(Request $request, $id)
    {
        //
        $product=Product::find($id);
        $oldcart=Session::has('Shopcart')? Session::get('Shopcart'): null;
        $cart=new Cart($oldcart);
        $cart->add($product,$product->id);
        $request->session()->put('Shopcart', $cart);
        return redirect()->route('shop.index');
    }
通过这两个部分,我可以将项目添加到会话中。问题是,当我尝试在前端访问它时,它会给我提示我尝试在这里添加内容,我可以看到我的数据,但在我重定向到我的商店页面之后

<span id="cart-total">{{ Session::has('Shopcart')?  Session::get('Shopcart')->totalQty : ''}}</span>
{{Session::has('Shopcart')?Session::get('Shopcart')->totalQty:'}

我在这里看不到任何东西有什么问题我看不到我还在控制器中添加了会话类,路由也正常

我找到了@apokryfos的答案,laravels 5.2以上的默认驱动程序都是cookie,我只需要将其更改为file来完成这个技巧,我不知道如何设置cookies,如果你找到了一些doc关于这一点,请与我分享

首先,我假设这都发生在
web.php
中定义的路由上,因为
api.php
路由不使用会话。尽管如此,会话可能很难诊断。作为第一步,打开浏览器的开发者窗口(对于使用F12打开的chrome),并检查会话cookie值。如果它在每个请求时发生更改,则表示cookie设置不正确或根本没有设置。您可以尝试将会话存储机制更改为文件或cookie,看看这是否有帮助。正如我所提到的,会话问题可能很难调试。@apokryfos ty这里的答案是我用于此方法的路由,它与此无关btw route::get('add-to-cart/{id}','ShopingCart@getAddToCart')->name('product.addToCart');使用会话可能会有所帮助:
使用会话检查这正是您的答案@Dilek,正如我提到的,我已经添加了使用illumb\Support\Facades\Session您的答案,您的工作功能就在这个问题中
Session::save()Cookie的大小限制为4kb,因此如果会话中存储了大量内容,则可能已经达到该限制。