【问题标题】:Laravel5 Session::flash() persist for more requests than only oneLaravel5 Session::flash() 持续存在的请求多于一个
【发布时间】:2016-12-31 04:39:55
【问题描述】:

我正在解决一个很奇怪的问题:

我尝试登录用户,如果凭据不正确,我将消息闪入 Session 并将用户 bach 重定向到登录页面。显示消息,该消息已闪入会话。无论如何,在我重新加载页面后,会话中仍然有消息,但是它应该消失了。

你能帮我吗? 这是我的代码,我将消息闪入会话:

  public static function verify($email, $password) {

    $verified = Auth::user()->attempt([
        'email' => $email,
        'password' => $password
    ]);

    if($verified) {
            $user = Auth::user()->get();
            Session::flash('message', [
                'title' => trans('user.logged_in'.($user->sex != null ? '_'.$user->sex : '')),
                'status' => 'success'
            ]);
            return redirect(route('adminDashboard'));
        }
        else {
            Session::flash('message', [
                'title' => trans('user.bad_credentials'),
                'status' => 'error'
            ]);
            return redirect()->back();
        }

    return $verified;

}

这是页面代码,显示在地址上,我在不正确的凭据后重定向到该地址 (redirect()->back())

@if(Session::has('message'))
    <?php
    $message = Session::get('message');
    $status = isset($message['status']) ? $message['status'] : 'success';

    $messageString = '';
    if(isset($message['title']) && $message['title'] != '')
        $messageString = '"'.$message['title'].'"';

    if(isset($message['text']) && $message['text'] != '')
        $messageString .= ($messageString != '' ? ',' : '').'"'.$message['text'].'"';

    ?>
    <script>
        $(document).ready(function () {
            Notify({!! $messageString !!}).{{ $status }}();
        });
    </script>
@endif

我对这种行为感到很困惑。在显示消息后,我还尝试在 View 中手动调用 Session::forget('message'),但如果我在此打印 Session::all() 之后立即从会话中消失,但在我重新加载后,消息再次出现在会话中。

非常感谢您的帮助。

【问题讨论】:

  • 它仍然存在或在第二次请求时过期??
  • 它仍然存在,如果重定向后仍然存在。无论如何,如果我手动将 url 更改为其他内容并转到那里,则闪烁消息消失。
  • 也许当您刷新页面时,它仍然想使用相同的凭据登录?如果您的登录表单方法发布尝试刷新页面,请输入 url。
  • 现在,它没有。当您尝试通过重新加载重新发送表单时,浏览器会向您显示有关此的通知。但我这样做:将表单发送到 url 以进行处理 - 例如:/process_login 我尝试验证用户,如果他插入了错误的凭据,设置 Session::flash 并且比做 redirect()->back() (到 url /login )。

标签: php flash session laravel-5


【解决方案1】:

更改以下行:

return redirect(route('adminDashboard'));

return redirect()->to('/adminDashboard');

我在我的项目中使用相同的,它工作正常。

【讨论】:

  • 不,它不起作用。我尝试重定向到('/login'),登录表单在哪里,仍然出现消息
猜你喜欢
  • 2014-08-26
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
相关资源
最近更新 更多