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

Posted

技术标签:

【中文标题】Laravel 如何在会话 Laravel 中存储额外的数据/值【英文标题】:Laravel How to store extra data/value in session Laravel 【发布时间】:2016-10-02 12:15:00 【问题描述】:

我在 laravel 登录中使用默认 auth()(电子邮件和密码) 现在我尝试在(年龄或城市)等文本字段中获取用户的输入

现在我想在我的会话中存储(年龄/城市)。

帮帮我

【问题讨论】:

为什么要在会话中存储年龄?为什么不在需要时从身份验证用户那里提取它? 当我单击登录按钮或成功登录时,有什么方法可以将我的文本字段值存储在会话中。 ? 我已经发布了正确方法的答案 【参考方案1】:

你可以使用

Session::put('key', 'value');

从会话中获取密钥

Session::get('key');

您可以使用session() 辅助函数作为@Alexey Mezenin 答案。

Laravel Session Documentation

【讨论】:

但是我必须在哪里写。我是 laravel 的新手 您是否在登录表单中添加了年龄/城市? 是的,我在登录表单中添加了这个 您需要在AuthController 中覆盖postLogin(),请参阅此***.com/questions/30656113/laravel5-custom-login 它可能会对您有所帮助。 不,我不想那样做。当我单击登录按钮或成功登录时,有什么方法可以将我的文本字段值存储在会话中。 ?【参考方案2】:

你可以使用session()助手:

session('age', 18); // saves age into session

$age = session('age')`; // gets age from session

更新

如果您想在用户注册后保存年龄和城市,您应该将此数据存储在数据库中,而不是会话中。您可以在app\Http\Controllers\Auth\AuthController.phpcreate方法中添加一些文件

【讨论】:

但是我必须在哪里写。我是 laravel 的新手 随心所欲:控制器的方法、刀片模板、中间件等。这取决于您要做什么。 Alexey 我在获取授权值并检查登录时需要此值。 laravel 中哪个文件检查用户和密码是否匹配? @KevalGarala,请看我回答的更新部分 当我单击登录按钮或成功登录时,有什么方法可以将我的文本字段值存储在会话中。 ?【参考方案3】:

好的,让我来启发你。如果您想将其存储在会话中,请这样做。

session('country', $user->country); // save
$country = session('country')`; // retrieve

但这不是我们在类似 Laravel 的框架中所做的方式,它使用模型

每次刷新页面时,一旦用户通过身份验证,应用程序就会在数据库用户表中查找用户是否存在于表中。经过身份验证的用户模型也是用户模型。所以通过它我们可以提取任何列。首先是向 User class(Model) $fillable 数组添加额外的字段。 所以它看起来像这样。

User.php

protected $fillable = ['username', 'password', 'remember_token', 'country'];

所以在任何地方使用用户名和密码登录后,只需使用 Request 类或 Auth 门面。不太推荐外墙,所以在这里为了你的好,作为一个新的,我只想说如何使用请求。假设您想在 TestController.php 中检索您的 Authenticated 用户国家/地区,这就是它在方法中的使用方式。

TestController.php

use Illuminate\Http\Request;

public function testMethod(Request $request)

   $someCountry = $request->user()->country; //gets the logged in user country
   dd($someCountry); //dd is die and dump, could be used for debugging purposes like var_dump() method

【讨论】:

非常真实。但我不想将国家/地区存储在数据库中。【参考方案4】:

使用请求

公共函数 ControllerName (Request $request)

   $request->session()->put('session_age', $age);


获取 session_age

$get_session_age = $request->session()->get('session_age');

使用会话

   public function ControllerName ()

       Session::put('age',$age);

    

获取会话

$session_age = Session::get('age');

不要忘记在你的控制器中定义会话或请求!!!

use App\Http\Requests;
use Session;

【讨论】:

【参考方案5】:

要在控制器中使用会话,您需要首先在控制器中包含会话

use Session;

之后在会话中存储数据。有几种方法可以做到这一点。我更喜欢这个(在控制器中)

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

要在视图中显示会话数据,您可以这样做

@if(Session::has('key'))
I'v got session data
@else
I don't have session data
@endif

要在控制器中获取会话数据,您可以这样做

session()->get('key')
//or
session()->get('key','defaul_value_if_session_dont_exist')

当您在会话中处理完数据后,您可以像这样删除它(在控制器中)

session()->forget('key');

所有这些 session 的基本用法都在 Laravel 官方文档 here 中有详细记录。

希望对你有帮助

【讨论】:

以上是关于Laravel 如何在会话 Laravel 中存储额外的数据/值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 中获取所有服务器会话的列表?

如何解决这个 Laravel 会话问题

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

如何在 laravel 中进行会话?

Laravel 存储用户会话的位置

会话不在 Vue.js 和 Laravel 中存储数据