Laravel 5.5会话功能异常求助:迁移CRUD后登录状态丢失
嘿,兄弟!从阿根廷来的朋友,别着急,这种登录后会话丢状态的问题在Laravel版本迁移里挺常见的,咱们一步步来排查:
检查会话驱动与目录权限
先确认.env文件里的SESSION_DRIVER配置,Laravel 5.5默认是file驱动,要是改成了其他驱动(比如database)得确保对应配置和表都没问题。另外,storage/framework/sessions目录的权限得设为755或775,服务器没有读写权限的话,会话数据存不进去,自然一刷新就丢状态。验证路由中间件组配置
Laravel 5.2到5.5的路由中间件组有关键变化!5.2里的web中间件组包含了会话启动、CSRF防护等核心逻辑,迁移时很容易忽略这点。你得确保所有需要会话的路由都包裹在web中间件组里:Route::group(['middleware' => 'web'], function () { // 登录、首页、Beneficiario相关路由都要放在这里 Route::get('/login', 'LoginController@showLoginForm'); Route::post('/login', 'LoginController@login'); Route::get('/home', 'HomeController@index'); Route::resource('beneficiarios', 'BeneficiarioController'); });要是路由没在
web组里,会话压根不会启动,登录状态自然留不住。检查认证控制器的默认逻辑
你说LoginController是近乎标准配置,那确认一下是不是正确引入了Laravel自带的AuthenticatesUserstrait?另外,别误改了登录成功后的跳转逻辑(比如redirectTo属性或redirectPath方法),不过这个一般不会直接导致会话丢失,主要还是前面的中间件和驱动问题。清除缓存与配置
版本迁移后一定要清缓存!运行这几个命令:php artisan cache:clear php artisan config:clear php artisan route:clear旧的配置缓存很可能会让新的会话设置无法生效。
检查Cookie相关配置
看看.env里的SESSION_DOMAIN是不是匹配你的域名(本地开发一般设为localhost),域名不匹配的话浏览器不会保存会话Cookie。还有SESSION_SECURE_COOKIE,本地HTTP环境下要设为false,不然浏览器会拒绝保存非HTTPS环境下的安全Cookie。
先把这些步骤挨个试一遍,大概率是中间件组配置或者会话驱动/权限的问题——毕竟5.2到5.5的路由中间件变化是最容易踩的坑。
内容的提问来源于stack exchange,提问作者Daniel Guilmezian

