在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
C#WebApi Session存储验证码过程中发现的问题
最新推荐文章于 2024-11-18 13:27:10 发布