Server Side Blazor多会话问题求助:新设备访问未创建新会话
解决服务器端Blazor会话状态复用的问题
折腾了一整个夏天部署服务器端Blazor应用,结果遇到新设备访问复用旧会话、连登录系统都受影响的问题,确实够闹心的!还好已经找到精准的解决方案了:
问题核心
服务器端Blazor里如果服务生命周期配置不当,会导致不同用户/新设备访问时复用了之前的会话状态,而切换到Client模板又会牺牲性能,显然不是最优解。
具体解决方案
关键是调整你的Storage服务的注册生命周期——把它注册为Scoped类型即可。Scoped服务的生命周期和单个用户的会话绑定,每个新用户的访问请求(新会话)都会创建一个全新的实例,既不会复用旧状态,也完全不会影响其他用户的正常使用。
修改Startup.cs中的ConfigureServices方法,添加一行注册代码:
public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.AddServerSideBlazor(); // 核心修改:将Storage注册为Scoped服务 services.AddScoped<Storage>(); }
补充信息
- 测试账号:
- 用户名:user,密码:user
- 用户名:test,密码:test
- 项目示例需要基于.NET Core 3.0环境运行
内容的提问来源于stack exchange,提问作者Elio
相关产品推荐
相关产品推荐

