如何防止laravel 5.2中的浏览器后退按钮

Posted

技术标签:

【中文标题】如何防止laravel 5.2中的浏览器后退按钮【英文标题】:How to prevent browser back button in laravel 5.2 【发布时间】:2017-04-23 07:47:06 【问题描述】:

我正在 laravel 5.2 中开发一个 crm 应用程序,但我遇到了一个问题。尽管我已在 Laravel 5.2 中正确注销,但我可以访问上一页。 Laravel 5.2 退出后如何防止浏览器的后退键登录?

我知道这不是安全问题,但我仍然想阻止用户使用浏览器的后退按钮访问上一页。我使用了以下 URL 中提到的以下解决方案,但它仍然对我不起作用。 https://arjunphp.com/laravel-5-logout-and-prevent-back-button/

到目前为止,我正在从头开始开发我的应用程序。我刚刚使用 Laravel auth 即 (php artisan make:auth) 并发现了这个问题并卡住了。

【问题讨论】:

How to control web page caching, across all browsers?的可能重复 ***.com/questions/30118998/…的可能重复 【参考方案1】:

这不是问题。当用户单击“返回”时,浏览器会将上一页呈现为缓存版本。

这里有 3 个选项:

    别担心。如果他们已经登录并且之前看到过它,那么如果他们回去的话,他们会期待同样的结果。但是,如果他们尝试导航到具有auth middleware 的任何其他位置,他们仍然会被重定向到登录页面。

    当他们注销时,将他们重定向到登录页面。

    将它们重定向回之前的 URL,这将再次触发 auth middleware

【讨论】:

非常感谢您的详细解释。 为单个返回按钮工作,如果我按两次返回按钮,它不起作用【参考方案2】:

正如大家所说,这不是问题。但即使你想阻止它,这也是你可以做的。在您的注销功能中,您在调用注销方法后使用类似这样的东西,

return redirect(\URL::previous());

我已经做到了,它解决了这个问题。请试试这个。 希望这会有所帮助!

【讨论】:

感谢您的回复,但它不起作用。为了更清楚,我也添加了注销功能代码。 public function logout() Auth::guard($this->getGuard())->logout();返回重定向(\URL::previous()); 请尝试使用 url()->previous() 而不是 URL::previous()。然后看看它是否有效。顺便说一句,您的注销功能对我来说看起来不错 不起作用:(我的注销功能在“vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php”文件下。我使用 php artisan make:auth 命令进行身份验证. 您还没有制作任何控制器来处理登录注销操作?那你如何控制路线?我很困惑 它不起作用我仍然能够访问上一页。就控制路线而言。这些是登录和注销的路线。可能是我没有得到你想说的,因为我是 Laravel 世界的新手。 :) Route::get('/admin/login','AdminAuth\AuthController@showLoginForm'); Route::post('/admin/login','AdminAuth\AuthController@login'); Route::get('/admin/logout', [ 'as'=> 'logouturl', 'uses'=>'AdminAuth\AuthController@logout' ] );【参考方案3】:

解决方案。创建中间件。

它应该看起来像这样。

<?php

 namespace App\Http\Middleware;
 use Closure;

 class HistoryBack
 
 /**
 * Handle an incoming request.
 *
 * @param \Illuminate\Http\Request $request
  * @param \Closure $next
 * @return mixed
 */
 public function handle($request, Closure $next)
   
  $response = $next($request);

  return $response->header('Cache-Control','nocache, no-store, max-age=0,     must-revalidate')
  ->header('Pragma','no-cache') //HTTP 1.0
  ->header('Expires','Sat, 01 Jan 1990 00:00:00 GMT'); // // Date in the past


     
    

下面是在内核中注册中间件,并在路由中使用 问候

请原谅我的英语。我正在使用翻译器来理解。我只会说和懂西班牙语和一点英语

【讨论】:

感谢您的回复,但我已经尝试过我在问题中提到的解决方案。

以上是关于如何防止laravel 5.2中的浏览器后退按钮的主要内容,如果未能解决你的问题,请参考以下文章

通过在 L5 中点击浏览器上的后退按钮来防止注销后再次登录?

注销后如何防止浏览器的后退按钮登录

使用jquery在浏览器中禁用后退按钮?

如何防止用户使用浏览器的后退按钮或退格键访问上一个 jsp 页面 [重复]

单击浏览器的后退按钮时如何销毁会话

防止页面后退(使浏览器后退按钮失效)