深入理解Session

首先由一个在项目中遇到的问题来引入


不管是在做PHP的项目也好,还是在做Javaweb的项目也好,相信大家都会经常用到session。做web项目可能觉得只要不关掉浏览器,我存的session是什么,取出来就是什么。但是给app写过接口就知道,其实session是用不了的。比如,web我们经常将短信验证码存到session,然后验证再从session取出来验证,于是,写app接口的时候,我们也这么做。但是在下一次请求验证短信验证码的时候,我们就会神奇的发现,取出来的session总是null。这到底是为什么呢,这是我之前做过的项目遇到的问题,比较深刻,今天有空就记录一下。


Session代表服务器与客户端的一次会话过程,这个过程是连续的,也可以时断时续的。浏览器第一次请求时,服务器会其创建一个session(已开启session的情况下),并赋予其一个sessionID,这个sessionID是唯一的,响应请求的时候回带回来放在setCookie里面,Apache服务器默认名称为PHPSESSID,tomcat是JSESSIONID。对于浏览器(不关闭的情况下)来说,对同一个服务器的不同请求,第一次请求后返回了cookie之后,后面的每次请求都会自动带上这个cookie,以此来区分不同客户端。但是APP的每次请求,不像浏览器只要页面不关闭连接就不中断,而是app每一次请求中断后,再次请求都会生成不同的sessionID,因此不同请求存储的值都是对不同的sessionID,因此不同请求去根据上次存储的键值去获取session肯定是null,有个办法就是造假cookie,就是第一次请求后服务器像给浏览器一样返回一个cookie,后面每次请求都把这个cookie带上,那就没问题了





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值