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

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

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

帮帮我

【问题讨论】:

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

标签: laravel session laravel-5.1


【解决方案1】:

你可以使用

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

从会话中获取密钥

Session::get('key');

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

Laravel Session Documentation

【讨论】:

  • 但是我必须在哪里写。我是 laravel 的新手
  • 您是否在登录表单中添加了年龄/城市?
  • 是的,我在登录表单中添加了这个
  • 您需要在AuthController 中覆盖postLogin(),请参阅此stackoverflow.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 中有详细记录。

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2019-05-31
      • 2019-05-02
      • 1970-01-01
      • 1970-01-01
      • 2018-02-10
      • 1970-01-01
      • 2021-12-21
      • 2023-03-07
      • 2015-06-18
      相关资源
      最近更新 更多