如何在Laravel5中刷新页面时删除会话数据?

时间:2016-10-05 07:49:55

标签: php laravel laravel-5

我用Laravel5制作了邮件发送程序,效果很好。

public function sendMail(Request $request){
    $data = session() -> all();

    // send mail to User and Admin
    Mail::send(['text' => 'test.mailtouser'], $data, function($message) use($data){
        $message -> to($data['email']) -> subject("To User");
    });
    Mail::send(['text' => 'test.mailtoadmin'], $data, function($message) use($data){
        $message -> to('admin@example.com') -> subject("To Admin");
    });

    return view('test.complete');
}

但是如果用户进行页面reflesh,则每次都会发送邮件。 所以我需要在页面刷新时删除会话数据。 我希望这样做。

public function sendMail(Request $request){
    $data = session() -> all();

    // send mail to User and Admin
    Mail::send(['text' => 'test.mailtouser'], $data, function($message) use($data){
        $message -> to($data['email']) -> subject("To User");
    });
    Mail::send(['text' => 'test.mailtoadmin'], $data, function($message) use($data){
        $message -> to('admin@example.com') -> subject("To Admin");
    });

    if( page reload... ){
        $request -> session() -> flush();
        return redirect('/');
    }
    else { // page reload not yet...
        return view('test.complete');
    }
}

任何解决方案?

P.S。 谢谢大家的回复。 是的,我可以在邮件发送后删除会话数据。 但是如果我在会话数据删除后尝试重新加载, 我将捕获TokenMismatchException。 所以我认为当会话数据为空时需要重定向。

public function sendMail(Request $request){
    $data = session() -> all();

    // send mail to User and Admin
    Mail::send(['text' => 'test.mailtouser'], $data, function($message) use($data){
        $message -> to($data['email']) -> subject("To User");
    });
    Mail::send(['text' => 'test.mailtoadmin'], $data, function($message) use($data){
        $message -> to('admin@example.com') -> subject("To Admin");
    });

    $request -> session() -> flush();

    if(empty( $request -> session() ...? ){
        return redirect('/');
    }
    else {
        return view('test.complete');
    }
}

如何捕获空会话数据?

1 个答案:

答案 0 :(得分:0)

谢谢大家。 对不起,像乌龟一样回答这个问题为时已晚。 最后,我解决了这个问题。

 public function sendMail(Request $request){
     $data = session() -> all();

     // send mail to User and Admin
     Mail::send(['text' => 'test.mailtouser'], $data, function($message) use($data){
         $message -> to($data['email']) -> subject("To User");
     });
     Mail::send(['text' => 'test.mailtoadmin'], $data, function($message) use($data){
         $message -> to('admin@example.com') -> subject("To Admin");
     });

     $request -> session() -> flush();

     return view('test.complete');
 }

并且,如果在app / Exceptions / Handler.php中找到令牌不匹配,则重定向到文档根目录

use Illuminate\Session\TokenMismatchException;

    public function render($request, Exception $e)
    {
        if ($e instanceof TokenMismatchException) { 
             return redirect('/');
        }
    }

我希望在Controller中捕获tokenmismatchexception,但我找不到方法。 这就是我使用handler.php

的原因