浏览器禁用了cookie怎么办
前言
在web开发过程中,cookie是我们常用的功能;最基本的用来存储服务端返回的jsessionid来识别用户,甚至保存其它更多的客户信息。假如客户端浏览器禁用了cookie,将会导致很多基于cookie的功能出现异常,甚至无法使用,作为开发者,我们怎么来解决这种问题呢?
百度了下,网上出现最多的回答就是URL重写,其原理就是通过response.encodeURL(***)
或者response.sendRedirect(response.encodeRedirectURL(***))
对要返回前端的url进行重写。这两个方法都可以通过request判断前端是否禁用了cookie,如果禁用了cookie,会自动将;jsessionid=xxx
添加到要返回前端的url后,前端进行请求时就会再url后带上jsessioonid。
思路
笔者碰到的问题是在在通过session实现登陆保持的情况下,如何让超时时间内的请求都可以识别到该用户。如果cookie在可用的情况下很好实现,会自动通过名为JSESSIONID的cookie来记录sessionid;如果cookie不可用呢?笔者采用的方法是在登陆成功后将sessionid返回给前端,然后前端通过其它可用的数据持久化技术,将该sessionid保存在客户端硬盘中(比如使用loalstorage);然后在后面的ajax请求中,通过判断浏览器是否禁用cookie来判断是否需要将";jsessionid=xxx"
加入到请求的url末尾。
服务端部分代码:
// 将sessonid返回给前端
retMap.put("sessionId", session.getId());retMap.put("state", 0);
retMap.put("person", personInfo);
retMap.put("message", "账号/密码登陆成功");
前端部分代码:
$.ajax({type : 'POST',data: {account: account,password: ps},dataType: 'json',url : getCookieUrl_2("../../sLoginDemo/login.do"),success: function(res) {if (res.state == 0) {console.log(res.message);// location.href = '../sMain/sMain.html'// 通过localstorage保存sessionIdsupports_html5_storage() && localStorage.setItem('sessionId', res.sessionId);// sessionId = res.sessionId;} else {showAlter && alert('失败:' + res.message);}},error: function(err) {showAlter && alert('错误:' + err.message);}
})/*** 判断浏览器是否支持localstorage* */
function supports_html5_storage() {try {return 'localStorage' in window && window['localStorage'] !== null;} catch (e) {return false;}
}/*** 通过判断客户端浏览器是否支持cookie来判断是否将jsessionid加入到url后* */
function getCookieUrl_2(url) {// window.navigator.cookieEnabled用于判断浏览器是否支持cookieif (!window.navigator.cookieEnabled && supports_html5_storage() && localStorage.getItem('sessionId')) {return url + ';jsessionid=' + localStorage.getItem('sessionId');}return url;
}
问题
以上方法看似解决了禁用cookie产生的问题,可是笔者在实际测试过程中发现localstorage同样有可能被禁用。比如笔者在使用chrome测试的时候,如果禁用了cookie,localstorage会同时被禁用。在这种情况下笔者以上列出的代码也无法实现通过session来识别用户。
总之,如果想使用session,客户端浏览器必须通过数据持久化技术来保存sessionId,无论是cookie还是localstorage,都是一种数据持久化的技术手段,如果大家知道有其它手段都可以使用,前提是浏览器支持该技术而且没有禁用该技术。
浏览器禁用了cookie怎么办相关推荐
- 浏览器禁用Cookie,基于Cookie的会话跟踪机制失效的解决的方法
当浏览器禁用Cookies时.基于Cookie的会话跟踪机制就会失效.解决的方法是利用URL重写机制跟踪用户会话. 在使用URL重写机制的时候须要注意.为了保证会话跟踪的正确性,全部的链接和重定向语句 ...
- 谷歌FLoC与禁用第三方Cookie后的江湖道术
隐私和安全总是协助寡头把花园围墙越砌越高,同时花园围墙也常常侵蚀一些开放的商业模式,技术创新却不断支持新的商业模式和客户需求.今天讲的事情就是浏览器禁用三方Cookie后的商业模式和技术创新. 科技向 ...
- 浏览器禁用cookie后session还能用吗?cookie与session区别
答:浏览器禁用cookie后session不能正常使用. cookie是一种客户端的会话技术,它是服务器存放在浏览器的一小份数据,浏览器以后每次访问该服务器的时候都会将这小份数据携带到服务器去. se ...
- 当浏览器全面禁用三方 Cookie
关注公众号 前端开发博客,领27本电子书 回复加群,自助秒进前端群 苹果公司前不久对 Safari 浏览器进行一次重大更新,这次更新完全禁用了第三方 Cookie,这意味着,默认情况下,各大广告商或 ...
- 浏览器禁用Cookie
做JavaWeb的都知道Session的底层是使用Cookie来实现的,服务器端会在本地文件中保存session信息,并将sessionID发给客户端(浏览器),浏览器就会把这个sessionID(准 ...
- 手机浏览器无法获取COOKIE的原因
为什么80%的码农都做不了架构师?>>> 手机浏览器上无法使用cookie,肯能是 1. 浏览器禁用 COOKIE ,这个简单开启即可. 2. 可能是手机所在时区有问题,将CO ...
- 解决新版chrome浏览器SameSite属性cookie拦截问题
解决新版chrome浏览器SameSite属性cookie拦截问题 问题现象: 由于升级了新版chrome浏览器后,发现系统正常iframe嵌套.AJAX,Image从以前的跨站会发送三方 Cooki ...
- 登录学习通报错:浏览器没有开启cookie功能
由于疫情,我们学校开启了线上授课,使用的教学APP就是学习通,我将我的学习通登录网址收藏起来,以便我下次直接找到登录界面,前面几次一直都是好好的,但是最近几次我点击登录时它报错说:我的浏览器是否已经禁 ...
- Cookie编程基础:检查浏览器是否接受Cookie
Cookie编程基础:检查浏览器是否接受Cookie 提要:一种确定浏览器是否接受 Cookie 的方法是先编写一个 Cookie,然后再尝试读取这个 Cookie.如果不能读取这个Cookie,则可 ...
最新文章
- java一天一次_做JAVA两年,月薪18k,这些自学心得你绝对值得借鉴
- IF10+的数据库文章!这里有5个案例,一起发起来?
- 解密中国研发团队如何开发VS2010新特性
- RDLC系列之六 打印纸张的大小(未解决)
- php mysql防卡_php mysql防止sql注入详解
- ps 替换文字_Python操作PPT实现自动查找替换
- Java多线程:线程安全和非线程安全的集合对象
- kali BEEF-XSS启动报错解决
- matlab如何建立时间温度曲线,matlab如何绘时间曲线?
- Linux——更换python版本
- 【Python】【有趣的模块】【requests】【一】HTTP头信息总结
- JAVA构造方法与构造方法的执行原理简单理解(栈与堆)
- 钽电容正负极_钽电容是什么?怎么区分正负极?
- Flutter 2.8 release 发布,快来看看新特性吧
- PLS-00103: Encountered the symbol “DECLARE“
- Caused by: java.lang.UnsatisfiedLinkError: No implementation found for void com.geoway.mobile.utils
- linux NetworkManage和network冲突问题
- QImage图像格式解读
- sybase ASE在unixlinux上的自动备份脚本
- 知识图谱关键技术总览