【问题标题】:how to make a session in laravel?如何在 laravel 中进行会话?
【发布时间】:2018-01-29 02:51:20
【问题描述】:

我想根据 $id(唯一 id)创建会话。这是为了当每个用户进入 Web 应用程序时,他们将拥有自己的会话 ID 和自己的数组。但是现在当我把它放在函数中并且每次我进入函数时,会话都不会被存储,它会覆盖上一个会话。那么如何修改代码,以便在函数 test() 中为每个用户创建所有会话。

这是我的代码:

public function test()
{
    $id = 'new3'; //later on will be auto generate id
    $array[$id] = ['one' => 'abc', 'two' => 'def'];

    if (!session($id)) {
        session($array);
    }

    dd(session()->all());
}

【问题讨论】:

标签: php laravel session


【解决方案1】:
 Session::put('variable', $yourvalue);

然后获取会话:

 Session::get('variable');

【讨论】:

    【解决方案2】:

    你应该像这样操作 laravel 会话:

    public function test(Request $request)
    {
        $id = 'new3'; //later on will be auto generate id
        $array[$id] = ['one' => 'abc', 'two' => 'def'];
    
    // Determining if an item exists in the session.
    if (!$request->session()->has($id)) {
        // Storing data in the session.
        $request->session()->put($id, $array[$id]);
    }
    
        dd($request->session()->all());
    }
    

    【讨论】:

    • 但我刚刚尝试了会话。我首先给它下面的 id new 是数组 "new" => array:2 [▼ "one" => "abc1" "two" => "def" ] 但是当我将 id 更改为 new1 时,上面的数组和session 不再可用,它将被替换为下面的 "aaaa" => array:2 [▼ "one" => "abc1" "two" => "def" ] id 将从 new 变为 aaaa跨度>
    • 是的,我使用了您的代码并运行它仍然相同。会话没有被存储,每次页面加载到相同的函数 text() 时它都会创建新会话
    【解决方案3】:

    正确的语法是...

    Session::set('variableName', $value);
    

    要获取变量,您可以使用...

    Session::get('variableName');
    

    如果您需要设置一次,我会弄清楚您想要设置它的确切时间并使用事件来完成。例如,如果您想在有人登录时设置它,您可以使用...

    Event::listen('auth.login', function()
    {
        Session::set('variableName', $value);
    });
    

    【讨论】:

      【解决方案4】:

      我认为你需要试试这个:

      public function test(Request $request)
      {
          $id = 'new3'; //later on will be auto generate id
          $array[$id] = ['one' => 'abc', 'two' => 'def'];
      
      // Determining if an item exists in the session.
      if (!$request->session()->has($id)) {
        // Storing data in the session.
        $request->session()->put($id, $array[$id]);
      } 
      
          dd($request->session()->all());
          if($request->session()->has($id)) {
                  $request->session()->forget($id);
          }
      }
      

      【讨论】:

      • 不,还是一样。每次我刷新函数时,新的 id 都会替换为旧的
      • @RollCasualLee id 的 session 名称是什么
      • @RollCasualLee 你设置的
      • 首先我设置 $id = 'new3';它创建了一个 new3 的新会话数组,而不是我更改为 $id = 'new4';之后 new3 不再存在,new4 被创建。
      【解决方案5】:

      即使我在操作存储在 session laravel 中的数组时也没有遇到什么问题。经过反复试验,我能够使事情正常进行,如下所示:

          $data['quantity'] = $request['quantity'];
          $data['price'] = $price;
          $data['tax'] = $tax;
          $data['shipping'] = 0;
      
      
          if($request->session()->has('cart')){
              $cart = $request->session()->get('cart', collect([]));
              $is_id_duplicate = false;
              foreach($cart as $key=> $c){
                  if ($c['id']== $request->id) {
                     $is_id_duplicate=true;
                  break;
                  }
              }
      
              if ($is_id_duplicate) {
                   $cart = $cart->map(function ($object, $key) use ($request) {
                      if($object['id'] == $request->id){
                          $object['quantity'] = $request->quantity;
                      }
                      return $object;
                  });
                  $request->session()->put('cart', $cart);
      
      
              }else{
                   $cart->push($data);
              }
      
              echo "<br><pre>";
              print_r($cart);
              echo "</pre>";
      
      
          }
          else{
              $cart = collect([$data]);
              $request->session()->put('cart', $cart);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-19
        • 2019-02-06
        • 2010-10-30
        • 2014-11-27
        • 1970-01-01
        • 2017-09-26
        • 2017-06-14
        • 2013-05-24
        相关资源
        最近更新 更多