如何在 laravel 中进行会话?

Posted

技术标签:

【中文标题】如何在 laravel 中进行会话?【英文标题】:how to make a session in 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());

【问题讨论】:

阅读文档.. laravel.com/docs/5.4/session#storing-data Session::set('variableName', $value);试试 请点击此链接 (***.com/questions/28417796/…) 【参考方案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);
    

【讨论】:

以上是关于如何在 laravel 中进行会话?的主要内容,如果未能解决你的问题,请参考以下文章

如何在PHP中进行会话处理?

通过将数据存储在会话存储中进行会话管理

在 php 中登录服务器端时在 android 中进行会话处理

在php中进行会话检查后无法显示表

我在 asp.net MVC 中进行会话处理它在查看页面按钮上工作我无法在我的控制器中的另一个操作上获得会话 [重复]

如何在 HTML 属性中进行评论?