C#WebApi Session存储验证码过程中发现的问题

在C# WebApi项目中,为验证码功能实现后台生成并存储时遇到问题。当WebApi接收到前端(网页或App)请求后,Session中的验证码会随每次请求更新,导致App端验证失败。原因是Session默认过期时间设置错误,晚于实际时间8小时。解决方案是后端在验证请求时,检查Session,若为空则生成验证码并设置正确的过期时间,确保Session中验证码的有效性。代码示例提供了解决该问题的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C#WebApi Session存储验证码过程中发现的问题

webapi开发的过程中,领导要求验证码需要后台实现然后网页前端和app展示。无奈只能硬着头皮上。大概过程就是后台自动生成一个4位或者多位随机字符串,存入HttpContext.Current.Session中,然后前端网页或者app登陆时传给后端,后端通过对比HttpContext.Current.Session与传过来的值来对比验证码是否正确,传给网页前端或app,然后由前端或app控制展现的格式。在实现的过程中。网页没有发现问题,但是app却出现一个令人头疼的问题。每次app请求验证码之后,HttpContext.Current.Session.SessionID的值都会变更,这是我不想看到的。因为SessionId的值一旦改变,Session中的验证码就会丢失。进过多次联调,终于发现了其中的问题。下面是我个人的理解:每次网页前端或者app请求接口的时候,后端都会检查SessionID是否为空,如果为空,就会默认生成一个SessionID,然后返回Response的时候,会默认把sessionID的值存到一个cookie中并且返回请求方,这个默认生成的cookie的过期时间是返回时间之后的20分钟,但是在我的实现中,cookie的过期时间总会比现在的北京时间晚8个小时,也就是UTC时间,因为网页前端并没有判断cookie 的逻辑,所以网页前端请求验证码的时候,并不会出现什么问题,但是app请求的时候会判断cookie的过期时间,所以每次请求过后,cookie都是过期 的,所以每次请求都是新的SessionID,这就需要后端返回的时候,不使用自动生成的cookie,返回Response之前,生成自己的cookie

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值