PHP Laravel:如何设置或获取会话数据?

Posted

技术标签:

【中文标题】PHP Laravel:如何设置或获取会话数据?【英文标题】:PHP Laravel: How to set or get Session Data? 【发布时间】:2016-09-14 12:01:00 【问题描述】:

我想在会话中存储一些数据以用于某些测试目的。我也在控制器中编写了会话代码。但是在 console.log ->resources -> session 我找不到我存储的任何值。 如果有人帮我找出我在控制器中犯的错误,请。

这是我的控制器:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Department;
use App\Http\Requests;
use Cookie;
use Tracker;
use Session;

 public function postdepartmentSave(Request $request)
    
         $this->validate($request,[
            'code' => 'required|min:2|max:7|unique:departments',          
            'name' => 'required|unique:departments',          
            ]);
            $department = new Department();           
            $department->code = $request->Input(['code']);            
            $department->name = $request->Input(['name']);
              $name=   $department->name;
         Session::put('name', $name);
        dd($name);
            $department->save();            
            return redirect('departmentSavePage');          
    

【问题讨论】:

【参考方案1】:

存储数据

要存储数据,您可以使用:

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

还有另一种方式,通过全局帮助器:

session(['variableName' => $value]);

获取数据

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

Session::get('variableName');

【讨论】:

为什么我在控制台看到Resources-&gt;Session Storage什么都没有显示? 你有没有尝试过其他地方?就像在视图或控制器中一样。查看它是否返回值。如果不是,则确认 $name 是否为空 $name 不为空,因为我已经看到它使用 dd(); 尝试 Session::get('variableName');在其他地方。例如在视图中,查看它是否返回值。 不,我只是写 $name 来访问会话数据,但它显示 Undefined variable: name【参考方案2】:

您没有犯过编码错误。问题是您在服务器端会话和 html5 的 sessionStorage 之间有点混淆。

Chrome 开发者工具上的Resources-&gt;Session Storage 视图仅向您显示存储在 HTML5 sessionStorage 对象中的信息。这是通过客户端 javascript 访问的客户端会话信息,与任何类型的服务器端会话信息完全分开。

例如,在您的 javascript 控制台中运行 sessionStorage.setItem('key', 'value');,您将看到该数据显示在 Resources-&gt;Session Storage 视图中。

您的 PHP/Laravel 代码正在处理服务器端会话。此信息不会显示在任何类型的开发人员工具视图中,因为它不应该被客户端工具访问。默认情况下,Laravel 使用基于文件的会话存储,这意味着您的会话信息存储在服务器上的文件中(storage/framework/sessions)。即使您将会话存储更改为使用 cookie,会话信息也会被加密,因此客户端无法读取数据。这是出于安全目的。

您可以阅读有关Laravel sessions here 的更多信息。 你可以阅读更多关于HTML5 sessionStorage here的信息。

【讨论】:

【参考方案3】:

如果您在该会话变量上有现有值,首先您需要清除它。 那么你可以像这样替换新值。

 session()->forget('key');
 session()->put('key', 'value');

【讨论】:

以上是关于PHP Laravel:如何设置或获取会话数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何从数据库中获取数据以及会话如何在 laravel 中工作? [复制]

如何在 Laravel 中设置会话超时?

错误 500:如何通过 Laravel 自定义配置文件获取会话变量?

Laravel 如何在会话 Laravel 中存储额外的数据/值

php 设置或获取会话

如何获取 Laravel 中所有模型的列表?