1. 接受cookie,cookies设置允许还是不行?
之前项目有一个需求,在下载文件的时候,在向后端发出请求的这段时间要有loading动画提高交互性。但是当时后端只能以传统的向前端发送流的形式来下载,ajax派不上用场,只能用js去模拟,但是这样就监听不到后端的返回,只能等后端将数据流发送回来,浏览器自动弹出下载提示。
想了想,只能是后端返回的时候发送一个Cookie: {downloading: true},然后我前端轮询这个字段,轮询到就将loading关闭,并将这个cookie删除。理论上来说好像是没什么毛病,但实际应用起来还是有一些坑的。
踩坑完毕,记录一下。
首先遇到的第一个坑就是发现cookie删不掉。
当然,这里说明一下,并不是js或者浏览器本身的机制不允许删除cookie,只是我删除的方式不对。
一开始我只是简单的将cookie设置为空,将expires设置为-1。心里想着,已过期,cookie自动清除,美滋滋,然而事实并没有按照我想的发生。downloading还是躺在cookie里面没有任何变化,是因为没有刷新吗?于是我在后面再次获取了一下:
console.log(document.cookie);
发现cookie里面确实还是有downloading这个字段。
没办法,打开application看看,果然发现了问题,后端传递过来的这个cookie没有设置expires,但是却默认设置了path,再联想我之前删除的cookie是没有带任何参数的,结合cookie的机制,发现了问题所在。
解决办法:
在删除cookie的时候要加上这个字段所带的参数,可能是出于安全的考虑,不同的参数,即使名字相同,也会当成两个cookie存储,所以我删除的并不是后端传过来的cookie,自然就删除不了。
第二个坑,后端设置cookie默认的path属性没有规律。
出于代码复用和性能考虑,后端的很多功能都会集成到一个API,再加上前端可能会用到一些第三方的框架,这些框架所采用过的设计模式都各不相同,都会造成一些不可预测的结果,而项目有可能在任何地方都会有下载的需求,所以当我发现如何删除cookie的时候,我又发现了一个坑,那就是不知道该如何准确获取cookie的path属性。而且如果你请求的接口默认path与你所在的url不匹配的话,浏览器将会忽略这次的cookie设置,在我的项目的直接体现就是,后端响应了cookie,但是我前端接收不到,页面loading无法消失,卡死了。
解决办法:
根据cookie的机制,当cookie的path属性为'/'的时候,cookie就不会被忽略。
所以解决办法就是让后端在set-cookie的时候讲path设置成固定的'/',以java为例:
Cookie cookie = new Cookie("Downloading","true");
cookie.setPath("/");
response.addCookie(cookie);
然后前端只要在监听到downloading字段的时候,再将path='/'的downloading删除就可以了。
2. cookie有隐私提示吗?
COOKIE默认即使是允许了,还是会出现提示的!
Cookie就是一个数据包,我们在每次访问网址的时候,浏览器都会将这个网站的Cookie发回到网址的服务器中,同时站点也可以随意的更改你电脑上的Cookie,但是Cookie不只有一个,而是一个网站一个,只是你在某个网址的唯一标识而已。如果你需要它不出现提示,那么直接在浏览器----工具---INTERNET选项---隐私---高级---覆盖COOKIE自动处理,下面都选择接受,同时勾选总是允许会话cookie,确定即可!
3. 如何开启电脑中的cookie?
是哪个浏览器?若是IE如下:
1.单击右上方的“工具”菜单。看上去它像一个齿轮图标。
2.选择“Internet 选项”。
3.单击“隐私”选项卡。
4.单击“默认”按钮(或手动将滑块下滑到“中”)。如果“默认”按钮为灰色,则表示当前已经为默认级别,Cookie则为启用状态。
5.单击“确定”按钮。
若是firefox如下:
1.单击左上角的 Firefox 菜单。(在 Mac 电脑上可直接单击 Firefox 菜单。)
2.选择“选项”,然后还是选择“选项”。(在 Mac 电脑上,选择“偏好”。)
3.单击“隐私”选项卡。
4.单击“Firefox 将会…”下拉菜单,选择“使用自定义历史记录设置”。
5.选择“接受来自站点的 cookie”复选框。
6.单击“确定”按钮。
若是chrome如下:
1.单击右上方的“自定义与控制”。
2.单击“设置”控制项。将自动打开一个新选项卡。
3.单击页面下方的“显示高级设置…”。
4.单击“内容设置…”
5.在“Cookie”下方,确保选中“允许设置本地数据(建议)”。
6.单击“确定”。
若是opera如下:
1.单击浏览器左上方的“Opera”菜单。
2.依次选择“设置”、“偏好”。
3.在弹出的偏好窗口的顶部选择“高级”选项卡。
4.选择左下方的“cookie”选项卡。
5.在“接受 Cookie”部分中,选择“接受 Cookie”。
6.单击“确定”接受更改。
4. 删除cookies有害吗华为手机?
cookie就是记录一下你的上网记录,比如你上一些论坛,如果你记住用户名密码的话,下次就可以直接登录,而不用再次输入用户名了,所以更方便了。
但是如果别人获取了你的cookie的话,就可能用你的用户名登录,查看你的上网记录等。不过在自己的电脑上没关系了。在网吧就不要记录用户名,不记录密码就可以了。
删除对电脑系统没有影响,放心的删除吧。我都定期删除。
5. 怎么访问不到cookie?
可以进入手机设置-应用程序-InternetExplorer-高级设置-来自网站和应用的Cookie-选择“全部接受”即可。 清除微信内置浏览器cookie方法:
1.打开并登陆微信,进入微信主界面;
2.点击“我”选项,接着点击设置;
3.在设置界面点击通用选项;
4.在通用界面点击清理微信存储空间;
5.接着选择删除的内容,选择全选;
6.然后选择删除,出现提示,确认删除即可完成清理。
6. 怎么关闭浏览器中的cookie?
要关闭浏览器中的Cookie,您可以按照以下步骤:
1. 首先,打开您使用的浏览器。
2. 在浏览器的工具栏中,找到并点击浏览器设置选项。通常,这个选项会显示为一个齿轮或三个垂直点的图标。
3. 在设置菜单中,查找并点击隐私设置或安全选项。具体名称可能因浏览器而异。
4. 在隐私或安全选项中,您应该能够找到有关Cookie的设置。点击进入Cookie设置页面。
5. 在Cookie设置页面,您将看到关于如何管理Cookie的选项。选择禁用Cookie的选项。
6. 确认禁用Cookie后,关闭浏览器设置页面。
请注意,关闭浏览器中的Cookie可能会影响您在许多网站上的登录状态、个性化设置和其他功能。如果您关闭了Cookie,某些网站可能无法正常工作。因此,在禁用Cookie之前,请确保您了解其潜在影响,并根据自己的需求进行决策。
7. 为什么前端还要token设置到Authorization?
前端将token设置到Authorization字段可以防止跨站请求伪造(CSRF)攻击。
将token存储在cookie中,黑客可以通过在相同的域中的恶意网站上发送请求来获取并使用该token。例:黑客可以使用跨站请求伪造 (CSRF) 攻击来获取并使用令牌。在这种攻击中,黑客利用恶意网站上的漏洞来向受害者的网站发送请求,并在请求中包含该令牌。如果受害者已经登录到该网站,并且未采取预防措施,则该请求将被视为有效,并为黑客提供了对受害者账户的访问权限。为了防止这种攻击,网站开发人员可以采取一些预防措施。其中之一是在表单或请求中添加一个验证令牌,该令牌仅在客户端和服务器之间传递,并用于验证请求的来源。还可以使用同源策略 (same-origin policy) 来限制网站上的 JavaScript 代码只能与来自同一域的网站通信。
除此之外,使用 HTTPS 也有助于防止 CSRF 攻击,因为它会加密数据传输,并防止攻击者篡改请求。
总之,防范CSRF攻击需要在验证令牌,同源策略和加密传输之间进行平衡,并确保网站具有足够的安全措施来防止未经授权的访问。
另外,设置在请求头的token更加安全,因为它不会被缓存到浏览器或代理服务器的历史记录中,并且在通过 HTTPS 发送的请求中不会被拦截。将token存储在请求头中,更方便前端进行管理,例如在用户登录或注销时,可以在请求头中直接添加或删除token,而不需要手动管理cookie。一个具体的例子是,当用户登录成功后,服务器会返回一个JWT(JSON Web Token)。前端可以将JWT存储在请求头的Authorization字段中。当前端发送请求到后端时,将会在请求头中携带有JWT,后端可以根据这个JWT来验证用户的身份。如果JWT有效,则后端会返回请求的数据,否则返回错误信息。这样,后端就不需要再次验证用户的身份,因为JWT已经验证过了。这样,前端就可以在每次请求中携带JWT,而不需要在每次请求中都将用户名和密码发送给后端。这样既提高了用户的体验,又提高了系统的安全性。总之,将token设置到Authorization字段中更安全,方便前端管理,保证了客户端与服务端之间的安全性。