.Net Framework Cookie 和 JS localStorage使用

.Net Framework Cookie 和 JS localStorage使用

背景:
下载万方文档,要求每月有次数限制,超过20次不可以下载,
以前是每点一次在线阅读,下载全文都计数,并且有重复记录的bug。

解决方案
引入Cookie,将文献ID和到期时间记录到Cookie,五分钟内针对同一篇文章不做计数,五分钟以后重新计数并及重新计时。

原理
Cookie设置到期时间后,到期自动清除,并不受用户关闭浏览器影响。

Code

private bool IsAddCount(HttpContext context)
        {
            string id = HttpUtility.UrlDecode(context.Request["id"]),
                title = HttpUtility.UrlDecode(context.Request["title"]);

            //读取Cookie, 过期浏览器自动清除, 5min之内不计入次数
            if (context.Request.Cookies["wfArticle_" + id] != null)
            {
                var sessionid = context.Request.Cookies["wfArticle_" + id];
                return false;
            }
            else
            {
                //过期重新记录
                System.Web.HttpCookie newcookie = new HttpCookie("wfArticle_" + id);
                newcookie.Values["id"] = id;
                newcookie.Values["title"] = title;
                newcookie.Expires = DateTime.Now.AddMinutes(5);
                context.Response.AppendCookie(newcookie);
            }
            return true;
        }

Cookie时间没法从浏览器传到后台,浏览器只根据过期时间管理Cookie
Cookie时间没法从浏览器传到后台,浏览器只根据过期时间管理cookie
Cookie被修改了Chrome兼容,微信浏览器更新不了Cookie
Cookie被修改了Chrome兼容,微信浏览器更新不了Cookie
Cookie具体值如图
在这里插入图片描述

隐藏的Bug
然而上线发布到服务器,并不能成功更改Cookie,于是我想着删掉Cookie,再创建同名Cookie,测试Chrome好用,但发布到服务器,IOS手机端微信访问依然删不掉Cookie,更别提更新了。笔者几乎崩溃,同事建议LocalStorage替代,微信浏览器好用,我偏不信这个邪,于是想着每次Expired后新建Cookie加时间戳,这样他就不需要删除,每上一个Cookie记录下一个Cookie的时间戳,这种链表的结构,但是问题是无法确定链表的指针节点,最终笔者妥协了,上localStorage。

var opId = $("#hd_openId").val();
var isAddCount = "true";
var now = new Date();
var lastDateStr = window.localStorage.getItem(aid);
var lastDate = new Date(lastDateStr);
var minutes = lastDate.getMinutes();
lastDate.setMinutes(minutes + 5);
var ExpiredDate = lastDate;
if (ExpiredDate > now) {
    isAddCount = "false";
}
else {
    isAddCount = "true";
    window.localStorage.setItem(aId, now);
}

最后将IsAddCount传到后台直接做判断是否需要更新Count计数,

总结
本来一天改完的Bug改了两天,第一天踩了个微信浏览器的坑,方向性错误。希望对遇到同样问题的小伙伴有帮助。

如有侵权请联系我删除,仅供学习参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值