Laravel 5.6 POST表单提交失败:页面过期报错求助
解决Laravel表单提交"The page has expired due to inactivity"错误
嘿,这个问题我太熟了——你遇到的是Laravel默认开启的CSRF保护机制触发的错误,核心原因就是你的表单里少了关键的CSRF令牌字段!
问题根源
Laravel为了防范跨站请求伪造(CSRF)攻击,默认会对所有POST、PUT、DELETE等非GET类型的请求验证CSRF令牌。如果你的表单提交时没有携带正确的令牌,框架就会返回这个“页面过期”的提示(本质是HTTP 419状态码)。
快速解决方法
只需要在你的表单内部添加Laravel提供的@csrf Blade指令即可,它会自动生成一个隐藏的CSRF令牌输入字段:
<form action="{{url('confirm')}}" method="POST" enctype="multipart/form-data"> @csrf <!-- 就是这一行,放在表单最上方或者其他隐藏字段附近都可以 --> <input type="hidden" value="idproof" id="id" name="id" > <input type="hidden" value="nameproof" id="name" name="name" > <!-- 你的确认按钮和其他表单元素 --> </form>
备选方案
如果你习惯用辅助函数,也可以用csrf_field()来替代@csrf,效果完全一样:
<form action="{{url('confirm')}}" method="POST" enctype="multipart/form-data"> {{ csrf_field() }} <input type="hidden" value="idproof" id="id" name="id" > <!-- 其余代码不变 --> </form>
额外提示
如果你之后需要用AJAX提交这类请求,记得在请求头里带上X-CSRF-TOKEN,可以通过页面里的meta标签获取(通常Laravel默认的模板里已经包含这个meta标签了)。
内容的提问来源于stack exchange,提问作者Jonio
相关产品推荐
相关产品推荐

