你的位置:首页 > ASP.net教程

[ASP.net教程]redis+cookies实现session机制(解决 手机浏览器不自动回传cookies导致session不可用问题)


 

昨天在手机端测试自己的项目遇到如下情况。

1.在手机上(苹果qq浏览器),登陆时存在session中的图片验证码结果,一直获取不到,考虑是cookies的问题。但是其他网站有貌似可以正常使用cookies,这是第一点矛盾。

2.在平板上(安卓qq浏览器),一直可以正常使用session,证明cookies传递没问题,证明代码没问题。

3.在手机上(苹果UC浏览器),浏览器刚下载的时候,第一次使用session成功,推出再次登陆,session又不能正常使用了,之后一直不正常。

4.PC端一直正常。

 

解决办法:

手动实现session机制

1.给Redis 增加key Val缓存内容。

   (1)首先guid生成一个key(相当于sessionId的值)

   (2)cookie名称叫做“vcode_sessionid”,并把第一步的key放到此键名的cookie中作为cookie的value,返回给浏览器。

   (3)将第一步生成的key作为redis的key,redis缓存的值就是我们之前需要存到session的值

      int num1 = rd.Next(0, 10);      int num2 = rd.Next(0, 10);      string vcodeKey = Guid.NewGuid().ToString();      string vcodeVal = (num1 + num2).ToString();      HttpCookie cookie = new HttpCookie("vcode_sessionid", vcodeKey);      RedisHelper.SetKeyVal(vcodeKey, vcodeVal);      RedisHelper.SetKeyExpressTime(vcodeKey, 300);      HttpContext.Current.Response.SetCookie(cookie);

2. 读取redis缓存的结果

    HttpCookie cookie = HttpContext.Current.Request.Cookies["vcode_sessionid"];

    然后从cookie对象中取出cookie的值,这个值就是我们redis中的键,根据键取value.

    string vcodeFromRedis = RedisHelper.GetValByKey(vcodeSessionId);

 这样一来session机制就实现了。其实这也是session原理,没什么复杂之处。

 

3.但是在某些手机qq浏览器中不回传cookie,这样依然不能在手机上正常使用我们自己实现的session机制。

   最后的解决办法就是使用如下方法,获取执行cookie值,并跟在url后面回传给服务器。

   js方法如下:

  

getCookie: function (cookieName) {      var strCookie = document.cookie;      var arrCookie = strCookie.split("; ");      for (var i = 0; i < arrCookie.length; i++) {        var arr = arrCookie[i].split("=");        if (cookieName == arr[0]) {          return arr[1];        }      }      return "";    }

 

最后,我上百个ajax都要手动将cookie值跟在后面?有好的方法欢迎推荐。

 

 

 

    




美国旅游路线报价费用美国旅游哪里好玩呢美国旅游签证怎么办理美国旅游去哪好美国旅游团报价优惠陕西九大自驾游线路 蜀道三国 陕西九大自驾游线路 探寻秦岭深处 陕西九大自驾游线路 盛唐之旅 滨城大连最美日落地推荐 山水田园水上乐园门票儿童优惠吗?深圳山水田园水上乐园怎么收费? 深圳观澜山水田园水上乐园门票价格?观澜山水田园水上乐园可以玩到几点? 观澜水上乐园在哪里?深圳观澜水上乐园怎么去? 观澜水上乐园地址?深圳市观澜水上乐园坐车怎么去? 哈尔滨极地馆学生票2015最新价格?哈尔滨极地馆学生票票价? 哈尔滨极地馆官网?哈尔滨极地馆网上怎么预定? 哈尔滨极地馆表演时间?哈尔滨极地馆几点表演? 五一劳动节比如世界有什么好玩的活动?成都比如世界游玩攻略? 福建德化云龙谷漂流有什么好玩的特色旅游项目? 三亚有哪些高档的酒店? 厦门玛琪雅朵花海好玩吗?有什么好玩的啊? 福建德化云龙谷漂流如何去最快? MTD4100-B Datasheet MTD4100-B Datasheet MTE100N05 Datasheet MTE100N05 Datasheet MTR2812SF Datasheet MTR2812SF Datasheet 江西旅游旅行社报价 江西旅游旅行社报价 江西旅游旅行社报价 江西参团旅游 江西参团旅游 江西参团旅游 深圳到江西旅游团价格 深圳到江西旅游团价格 深圳到江西旅游团价格