.Net Framework Cookie 和 JS localStorage使用
2020-05-12 16:11
84 查看
.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被修改了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改了两天,第一天踩了个微信浏览器的坑,方向性错误。希望对遇到同样问题的小伙伴有帮助。
如有侵权请联系我删除,仅供学习参考
相关文章推荐
- js_html_input中autocomplete="off"在chrom中失效的解决办法 使用JS模拟锚点跳转 js如何获取url参数 C#模拟httpwebrequest请求_向服务器模拟cookie发送 实习期学到的技术(一) LinqPad的变量比较功能 ASP.NET EF 使用LinqPad 快速学习Linq
- asp.net 中使用Cookie 及 js 中使用Cookie
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- 前端 JS,localStorage/sessionStorage、cookie 及 url 等实现前台数据共享、传输
- js window.localStorage 使用
- DotNet Compact Framework中位图资源的使用学习笔记
- WinForm自动化测试工具开发札记(5)使用.NET Framework 2.0 新功能抓屏
- 正在使用.NET Framework 2.0 Beta 2的开发者要注意了!
- MagicAjax.NET Framework Usage 使用
- 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
- [翻译]一步步教你配置SQL SERVER合并复制(八)代码部分(使用.NET CompactFramework)
- asp.net中的cookie使用方法
- 使用 .NET Compact Framework 进行 SIM 编程
- .net下导致Session失效的一种情况:js教本中使用window.open和window.showModalDialog时需要注意
- 使用JS实现倒计时功能(http://www.cnblogs.com/doll-net)
- 使用Net Micro Framework加速无线传感器网络开发
- 如何在AjaxPro.net的AjaxMethod中使用session和cookie
- ASP.NET Cookie使用(转)
- Visual Studio 2008开发新特性系列课程(10):使用Visual Studio 2008和.NET Compact Framework 3.5创建Mobile应用程序
- [原创]VB.net技巧之七----asp.net中cookie的使用