当前位置: 首页 > 知识库问答 >
问题:

在Laravel 5中注销后阻止浏览器的后退按钮登录

扈韬
2023-03-14

我是新来的Laravel 5,并试图使一个简单的身份验证页面。我的问题是我可以在我点击注销链接后正确注销,但是如果我点击浏览器的后退按钮,仍然可以看到页面的内容,实际上不应该看到关于我的授权中间件过程。我读到我可以通过禁用缓存来防止这种情况,但不认为这是最好的方法,所以我如何才能以更好的方式做到这一点?简单地说,我的注销路线是

Route::get('logout', array('uses' => 'LoginController@logout'));

注销功能为:

public function logout() {
        Auth::logout(); // logout user
        Session::flush();
        Redirect::back();
        return Redirect::to('pages/login'); //redirect back to login
}

共有3个答案

庾和昶
2023-03-14

步骤1:使用以下命令创建一个中间件:

php artisan make:middleware PreventBackHistory

步骤2:

替换历史记录的内容。包含以下内容的php:

<?php

namespace App\Http\Middleware;

use Closure;

class PreventBackHistory
{
    /**
     * 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','no-cache, no-store, max-age=0, must-revalidate')
            ->header('Pragma','no-cache')
            ->header('Expires','Sun, 02 Jan 1990 00:00:00 GMT');
    }
}

步骤3:在内核中注册中间件。php

'preventBackHistory' => \App\Http\Middleware\PreventBackHistory::class,

和好去:)

温成济
2023-03-14

当用户单击“上一步”按钮时,他们实际上并没有登录,只是浏览器呈现了它从以前的页面视图中缓存的内容。用户将无法导航或与要求他们登录的任何内容交互,因为对于服务器上的应用程序,他们未经过身份验证。

当用户单击后退按钮时,您无法控制它,因为它不会向服务器发出请求。

使用“后退”按钮,他们可以查看的唯一内容是登录时已经访问过的内容。如果他们试图访问任何新的内容,他们将向您的应用程序发出新的请求,您的中间件将触发并将其重定向到登录页面。

我想如果你真的想停止这种行为,你可以使用一些JavaScript之类的东西来发送ajax请求,并检查用户是否以这种方式登录,但从安全角度来看,这是毫无用处的。

邬楚青
2023-03-14

使用artisan创建中间件:

php artisan make:middleware RevalidateBackHistory

在RevalidateBackHistory中间件中,我们将标头设置为无缓存,并重新验证:

<?php
namespace App\Http\Middleware;
use Closure;
class RevalidateBackHistory
{
    /**
    * 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')
            ->header('Expires','Fri, 01 Jan 1990 00:00:00 GMT');
    }
}

在内核中更新应用程序的路由中间件。php:

protected $routeMiddleware = [
    .
    .
    'revalidate' => \App\Http\Middleware\RevalidateBackHistory::class,
    .
    .
];

就这些!所以基本上,您只需要为需要用户身份验证的路由调用重新验证中间件。

 类似资料:
  • 本文向大家介绍在vue中阻止浏览器后退的实例,包括了在vue中阻止浏览器后退的实例的使用技巧和注意事项,需要的朋友参考一下 如下所示: vue阻止浏览器后退按钮与js相同,同样没有脱离原生的js 以上这篇在vue中阻止浏览器后退的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 问题内容: 我在www.darknovagames.com上运行了基于浏览器的游戏。最近,我一直在努力使用CSS重新格式化该网站,试图让其所有页面都根据HTML标准进行验证。 我一直在想着要在页面左侧放置AJAX导航菜单的想法(而不是每次都将用户带到一个单独的页面,而是需要重新加载标题和导航栏,而这几乎是不会改变的),我知道如果这样做,我可能会破坏浏览器中的“前进/后退”按钮。我的问题是,我应该继

  • 问题内容: 我在Django中使用python,我希望重定向用户在注销后单击“后退”按钮时重定向到登录页面。如何实现呢?在哪里写代码? 要测试django管理员是否处理此..i,请先登录django admin ..注销,然后单击“后退”按钮,然后我就可以看到上一页。为什么django管理员无法处理此问题。 这是在django admin中注销的Ccode: 问题答案: 终于找到了解决方案: 这将

  • 大家好,我正在使用CodeIgniter框架,我有一个问题,在注销后,会话已经被销毁,并重定向到登录表单,并在重定向到登录表单后,浏览器返回按钮可以备份到仪表板,但有错误,因为会话是已经被摧毁了。所有我想要的是禁用浏览器的后退按钮或任何我以前不能加载的东西。我读过关于这个问题的其他帖子,并尝试了他们的解决方案,但它不起作用。我已经根据我在构造函数的其他帖子中读到的内容粘贴了这段代码。 这是我的注销

  • 问题内容: 如何禁用浏览器的“后退”按钮(跨浏览器)? 问题答案: 这个问题是非常相似,这一个 … 您需要强制缓存过期才能正常工作。将以下代码放在页面代码后面。

  • 问题内容: 我正在用php做在线测验应用程序。我想限制用户再次参加考试。我尝试了以下脚本,但是它停止了我的计时器。我该怎么办? 我已经包含了源代码。计时器存储在cdtimer.js中 我有一个考试计时器,该计时器从 mysql 值中获取考试时间。计时器相应地启动,但是当我放入用于禁用后退按钮的代码时,计时器停止。我怎么了 问题答案: 有许多原因导致禁用后退按钮无法真正起作用。最好的选择是警告用户: