为啥 Laravel 默认通过 POST 注销(而不是 GET)? [复制]

Posted

技术标签:

【中文标题】为啥 Laravel 默认通过 POST 注销(而不是 GET)? [复制]【英文标题】:Why does Laravel, by default, logout via POST (As opposed to GET)? [duplicate]为什么 Laravel 默认通过 POST 注销(而不是 GET)? [复制] 【发布时间】:2016-12-11 21:53:49 【问题描述】:

在 Laravel 应用程序的上下文中,POST 执行注销的意义是什么? POST 超过 GET 是否存在一些安全性和/或会话特殊性?

生成的make::auth中的相关部分:

<ul class="dropdown-menu" role="menu">
  <li>
    <a
      href=" url('/logout') "
      onclick="event.preventDefault();document.getElementById('logout-form').submit();">
      Logout
    </a>

    <form id="logout-form" action=" url('/logout') " method="POST" style="display: none;">
       csrf_field() 
    </form>
  </li>
</ul>

【问题讨论】:

这是一个选择问题,而且在***上也已经discussed before了。 一般来说,任何会改变服务器状态的动作都应该通过 POST 发送。这就是我们一直以来的建议。 RE:“标记为重复”-发布时,我是在 laravel 的上下文中询问的(我认为这是 laravel 的一个特殊功能),但可以看到更广泛的“原始”问题如何也适用 【参考方案1】:

GET 请求应该是“safe”并且不应该有任何明显的副作用。例如,浏览器的预缓存功能是否跟随链接并不重要。那应该只是得到一些数据。

注销用户会产生很大的副作用,因此 GET 是不合适的。

【讨论】:

以上是关于为啥 Laravel 默认通过 POST 注销(而不是 GET)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥它呈现 django 管理站点而不是自定义注销页面

Laravel 5.4 TokenMismatchException 和注销

每当进行 AJAX POST 时,Laravel 4 应用程序都会将用户注销

为啥模型除了 id 不通过 slug 返回数据?

为啥laravel中的两个守卫会相互影响?

如何使用 Laravel 5.3 注销并重定向到登录页面?