Laravel flash 或会话消息未过期 [未维护已更新]

Posted

技术标签:

【中文标题】Laravel flash 或会话消息未过期 [未维护已更新]【英文标题】:Laravel flash or session messages not expiring [ not maintained Updated ] 【发布时间】:2017-06-01 03:21:19 【问题描述】:

经过一些研究后更新 经过一些研究,我得出结论,我的会话在我明确保存之前不会被维护,下面的代码运行良好,但是为什么????Ref here

Session::put('lets_test', 2);
Session::save();

老问题 我是 laravel 5.3 的新手,遇到了一个问题。我的 Laravel 会话或 Flash 消息不会过期,每次重新加载页面时它们都会显示,直到我使用 Session::flush() 以下是我的控制器代码

<?php

namespace App\Http\Controllers;


use Session;
use Auth;
use Illuminate\Http\Request;
use App\User;
use App\Hospital;
use App\Wpr;
use Helper;

class OperatorController extends Controller

    public $user_detail;

    public function __construct()
    
        $this->middleware('auth');
        $this->middleware('operator');
    
    public function store (Request $request) //Form is being submitted here
        //My logic here
        Session::flash('user_message', 'Thank You');
        return redirect('/operator/wpr');
    

我也用过Session::set('user_message', 4); 和刀片视图

@if(Session::has('user_message'))
    <div class="message  animated tada">
         Session::get('user_message') 
    </div>
@endif

我试过Session::forget('user_message'),但没有运气。 经过一些研究更新我的帖子。 reading this post on stack 与我的问题有点接近,因为这个问题与我的问题完全相同,但不幸的是它仍然存在,我已将会话存储从文件更改为数据库(以防文件权限存储目录)。还有哪些可能?

请帮忙,提前谢谢。

【问题讨论】:

你能显示你的控制器代码吗?所以基本上闪存会话一旦重定向到新的 URL 或页面就会被删除。由于您再次重新加载同一页面,控制器再次设置会话并显示。 感谢代码更新 【参考方案1】:

最终,不知何故,我设法为我的问题找到了解决方案,而不是维持会话。我不认为它有任何与文件权限相关的问题。现在我明确地保存我的会话并明确地删除它。 做了一个 Helper 类添加了两个方法

public static function SetMessage($message, $type) 
   Session::put('user_message', $message);
   Session::put('user_message_type', $type);
   Session::save();

public static function ForgetMessage() 
   Session::forget('user_message');
   Session::forget('user_message_type');
   Session::save();

在控制器类中

 Helper::SetMessage('Record updated successfully', 'success');

在刀片视图模板中

@if(Session::has('user_message'))
    <div class="alert alert- Session::get('user_message_type') ">
      Session::get('user_message') 
      Helper::ForgetMessage('user_message') 
    </div>
@endif

我希望这可能对面临此类问题的人有所帮助。 但是为什么会这样,还不得而知,说不定哪天我也会贴出原因。如果可以以更好的方式完成,欢迎提出更多建议。

【讨论】:

【参考方案2】:

试试这个:

if(isset($_SESSION['user_message'])) 
        $message = $_SESSION['user_message'];
        unset($_SESSION['user_message']);
        return $message;
    

【讨论】:

这个 sn-p 可能适用于香草,但不适用于 laravel。我已经更新了我的问题。【参考方案3】:

在您的 (Laravel) 刀片中,在 if 循环的末尾添加 $request-&gt;session()-&gt;forget('key');Session::forget('key');,这将结束或删除该密钥的会话。这可能有助于您了解有关 laravel 5.3 会话的更多参考,请访问laravel 5.3

【讨论】:

以上是关于Laravel flash 或会话消息未过期 [未维护已更新]的主要内容,如果未能解决你的问题,请参考以下文章

刀片未在视图上显示消息

Codeigniter v3.0 Flashdata 会话在 PHP 7.4 和 XAMPP 8.0 中未过期

Firebase 消息:由于所需的 APNs SSL 证书已过期或未上传,无法向 iOS 设备发送消息

会话过期后未调用 @PreDestroy

未设置时的php会话变量问题

Firebase 身份验证会话未过期 [重复]