0

我有一个控制器,CartController.php 在这个控制器中我有两种方法:

  public function store(Request $request)
  {
        // we'll check to see if the order is already in db
          $productOrderDetails = new \App\Cart;
          $productOrderDetails->session_id = session()->getId();
          $productOrderDetails->job_name = $request->jobName;
          $productOrderDetails->pro_name = $request->productName;
          $productOrderDetails->save();
          return response()->json($request);
  }

  public function displayCart()
  {
    //dd($upsCost);
    $currentSessionID = session()->getId();
    $displayCart = Cart::where('session_id', $currentSessionID)->get();
    dd($currentSessionID);
    session(['inCartDetails' => $displayCart]);
    return view('layouts.cart')->with('cartDetails', $displayCart);
  }

store 方法被 fetch api post 命中。

 export async function postProductDetails(details) {
  const url = 'http://127.0.0.1:8000/api/cartDetails';
  let response = await fetch(url, {
    method: 'POST',
    mode: 'cors',
    credentials: 'same-origin',
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(details)
  })
  if(response.ok) {
    window.location.href = "/cart";
  } else {
    alert("HTTP-Error: " + response.status);
  }
  // return response.json();
}

我的问题是我得到了两个不同的会话 ID。当通过获取帖子命中方法存储时,我得到会话ID:

HnSxCjSXflzyt4Uks3SGsEZcJEHleSR97N1RNA5l

然后,当我运行 displayCart 方法时,它会给我一个不同的会话 ID:

su8A6E3umTW1XmXf5Yhk3SHU5WUGCEpcJWXlnVIP

几分钟后就可以从同一个浏览器访问它。知道为什么会这样吗?

4

1 回答 1

0

我不会依赖会话 ID 来实现您的逻辑,但是您可以创建一个购物车并将购物车 ID 保存到会话中,然后检索它:

    public function store(Request $request)
    {
        $productOrderDetails = new \App\Cart;
        $productOrderDetails->job_name = $request->jobName;
        $productOrderDetails->pro_name = $request->productName;
        $productOrderDetails->save();
        session(['cart_id' => $productOrderDetails->id]);
        return response()->json($request);
    }

    public function displayCart()
    {
        $displayCart = session('cart_id') ? Cart::find(session('cart_id')) : null;
        return view('layouts.cart')->with('cartDetails', $displayCart);
    }
于 2020-04-23T19:09:18.403 回答