Laravel 5.5生产环境登录报页面过期错误求助
嘿,这个问题我太熟了——Laravel生产环境出现这个「页面已过期」提示,90%以上都是CSRF令牌或者会话配置的锅,本地正常是因为本地环境的会话和令牌逻辑没被服务器配置干扰。我给你一步步排查解决:
先检查表单里的CSRF令牌
这是最容易遗漏的点!Laravel的POST请求必须验证CSRF令牌,你提供的登录页面代码片段里没看到这个字段,一定要在表单内部加上:@csrf它会生成一个隐藏的令牌输入框,确保Laravel能验证请求的合法性。如果手动加的话也可以:
<input type="hidden" name="_token" value="{{ csrf_token() }}">核对线上环境的会话配置
打开线上的.env文件,检查这几个关键配置:APP_URL:必须和你的线上域名完全一致(比如https://your-production-domain.com)SESSION_DOMAIN:要匹配你的主域名,比如如果域名是example.com,就设为example.com(不要加http/https)SESSION_SECURE_COOKIE:如果线上用了HTTPS,一定要设为true,确保会话Cookie只通过HTTPS传输
修改完配置后,务必执行缓存清理命令,不然Laravel会用旧的配置:
php artisan config:cache php artisan cache:clear验证HTTPS环境下的会话安全设置
打开config/session.php,检查这两个选项:secure:应该设为env('SESSION_SECURE_COOKIE', false),确保它读取.env里的配置same_site:建议设为'lax'或者'strict',避免跨域场景下的会话失效问题
清除浏览器缓存和Cookie
有时候用户浏览器里残留的旧Cookie会干扰新的会话,测试时可以用无痕模式访问,或者手动清空浏览器的缓存和Cookie再试。如果用了负载均衡/反向代理,检查服务器配置
要是线上部署了Nginx、Apache或者负载均衡器,得确保它们正确传递了X-Forwarded-For和X-Forwarded-Proto头,Laravel需要这些头来识别请求的真实协议和客户端IP。比如Nginx配置里要加:proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme;同时在
config/trustedproxy.php里把你的代理服务器IP加入信任列表(生产环境别用*通配符,尽量指定具体IP,更安全)。
先从CSRF令牌开始排查,这是最常见的原因,解决后再逐步检查其他配置,应该就能搞定了!
内容的提问来源于stack exchange,提问作者Emil K

