cookie的介绍和使用
一、什么是cookie
是由服务器端生成,发送给客户端(一般指浏览器),浏览器将cookie以键值对的形式保存到某个目录下的文本文件内。下次请求该网站时就把cookie发送回服务器。(cookie就是一个小文件,浏览器对其大小一般限制在4k,用来记录一些信息(一般用作标识))
二、cookie的作用
web应用程序是使用Http协议传输数据的,而Http协议是无状态的,一旦数据交换完成就会断开连接,再次交换就要重新建立连接,此时,服务器并不知道该浏览器与自己进行过数据交互。浏览器在发送请求后,服务器除了正常的响应之外,会在响应头里加入一个set-cookie:id=XXX
,浏览器接收之后会存入本地文档(txt),下次向该服务器发送请求时,会附带此cookie.
三、cookie的生命周期
Cookie可以保持登录信息到用户下次与服务器的会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(不排除用户手工删除Cookie)。而还有一些Cookie在用户退出会话的时候就被删除了,这样可以有效保护个人隐私。Cookie在生成时就会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有些页面将Cookie的生存周期设置为“0”或负值,这样在关闭浏览器时,就马上清除Cookie,不会记录用户信息,更加安全。
四、cookie的特点
1.需要遵循浏览器的同源策略(两个网站即使根域名相同,端口或者子域名不同,那这两个网站就分别拥有自己的cookie,并且不能互相操作)
2.内存大小有限制(每个浏览器对其个数的限制不相同,每个域名在20~50之间,大小一般都限制在4K)
3.cookie的安全性较低,存储的数据容易被窃取
五、cookie的安全性问题及其解决方案
1.cookie欺骗
攻击者在拿到cookie后可以通过模拟身份验证,将该cookie向服务器提交,冒充该cookie的拥有者访问网站窃取用户信息。
2.cookie截获
cookie以纯文本的形式在浏览器和服务器之间传递,在web通信时极容易被非法用户截获和利用。非法用户截获cookie后,在cookie的有效时间内重新发放给服务器,那么这个非法用户就拥有了这个合法用户的所有权限。
3.Flash的内部代码
Flash中有一个getURL()函数,Flash利用它自动打开指定的页面。那么这个就意味着,你在观看Flash动画时,在Flash的内部可以悄无声息的打开一个极小的不易发现的包含特殊操作的页面,可以是木马,可以向远端输入当前cookie或者用户信息,这是非常危险的,由于这个是Flash内部的操作,所以网站无法禁止,要想避免,尽量打开本地防火墙以及访问正规网站。
4.解决方案
(1)设置cookie有效期不要太长
(2)设置HttpOnly属性为true,可以防止js脚本读取cookie信息,有效的防止XSS攻击
(3)设置复杂的cookie,进行加密(例如:cookie的key使用uuid,随机生成,cookie的value使用复杂组合,用户名+当前时间+有效时间+随机数)
(4)验证token,每次请求,都去将当前cookie和ip组合起来加密后的token与保存的token作对比,只有完全对应才能验证成功。
(5)sessionId虽然放在cookie中,但是相对的session更安全,可以将相对重要的信息存入session。
注:浏览器第一次请求服务器时,服务器会生成一个session,并返回给浏览器,这个sessionId会被保存在浏览器的会话cookie中。session在服务器的默认有效时间是30分钟。
(6)使用https,如果网站支持https,那么可以为cookie设置Secure属性为true,它的意思是,cookie只能使用https协议发送给服务器,而https比http更加安全。
六、cookie的使用
JS版本
function addCookie(key, value, day, path, domain) {
// 1.处理默认保存的路径
var index = window.location.pathname.lastIndexOf("/")
var currentPath = window.location.pathname.slice(0, index);
path = path || currentPath;
// 2.处理默认保存的domain
domain = domain || document.domain;
// 3.处理默认的过期时间
if(!day){
document.cookie = key+"="+value+";path="+path+";domain="+domain+";";
}else{
var date = new Date();
date.setDate(date.getDate() + day);
document.cookie = key+"="+value+";expires="+date.toGMTString()+";path="+path+";domain="+domain+";";
}
}
function getCookie(key) {
// console.log(document.cookie);
var res = document.cookie.split(";");
// console.log(res);
for(var i = 0; i < res.length; i++){
// console.log(res[i]);
var temp = res[i].split("=");
// console.log(temp);
if(temp[0].trim() === key){
return temp[1];
}
}
}
// 默认情况下只能删除默认路径中保存的cookie, 如果想删除指定路径保存的cookie, 那么必须在删除的时候指定路径才可以
function delCookie(key, path) {
addCookie(key, getCookie(key), -1, path);
}
JQ版本
(function ($, window) {
$.extend({
addCookie: function (key, value, day, path, domain) {
// 1.处理默认保存的路径
var index = window.location.pathname.lastIndexOf("/")
var currentPath = window.location.pathname.slice(0, index);
path = path || currentPath;
// 2.处理默认保存的domain
domain = domain || document.domain;
// 3.处理默认的过期时间
if(!day){
document.cookie = key+"="+value+";path="+path+";domain="+domain+";";
}else{
var date = new Date();
date.setDate(date.getDate() + day);
document.cookie = key+"="+value+";expires="+date.toGMTString()+";path="+path+";domain="+domain+";";
}
},
getCookie:function (key) {
// console.log(document.cookie);
var res = document.cookie.split(";");
// console.log(res);
for(var i = 0; i < res.length; i++){
// console.log(res[i]);
var temp = res[i].split("=");
// console.log(temp);
if(temp[0].trim() === key){
return temp[1];
}
}
},
delCookie:function (key, path) {
addCookie(key, getCookie(key), -1, path);
}
});
})(jQuery, window);
cookie的介绍和使用的更多相关文章
- JMeter 配置元件之HTTP Cookie Manager 介绍
配置元件之HTTP Cookie Manager 介绍 by:授客 QQ:1033553122 测试环境 apache-jmeter-2.13 1. Cookie管理器介绍 Cookie Ma ...
- Session&Cookie 的介绍和使用
Session介绍与使用 1.Session基本介绍 Session:在计算机中,尤其是在网络应用中,称为“会话控制”.Session 对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序 ...
- 转:Http协议中Cookie详细介绍
Http协议中Cookie详细介绍 Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了, ...
- localStorage , sessionStorage ,cookie 使用介绍
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Cookie的介绍及使用
咱们不搞一开始就一大堆理论知识介绍,怕把人讲懵了...... 咱们换一个思维方式——"从现象看本质",先说说我们看到了什么,再从看到的现象中提出问题,最后深入寻找答案. 我们看到的 ...
- Cookie的介绍
Cookie是某些站点为了辨别用户身份而存在用户本地终端上的数据.Cookie总是保存在client中,可分为内存 Cookie和硬盘Cookie,而依照时间划分.又能够分为非持久Cookie和持久C ...
- session与cookie的介绍和两者的区别之其相互的关系
转:https://blog.csdn.net/weixin_37196194/article/details/55806366 本文分别对Cookie与Session做一个介绍和总结,并分别对两个知 ...
- 【转】asp.net中的cookie使用介绍
来源:http://www.jb51.net/article/30398.htm 一.cookie导读,理解什么是cookie 1.什么是cookie:cookie是一种能够让网站服务器把少量数据(4 ...
- httpclient cookie使用介绍
COOKIE的处理 session的保持是通过cookie来维持的,所以如果用户有勾选X天免登陆,这个session就X天内一直有效,就是通过这个cookie来维持. 如果没有选中x天免登陆,基本上就 ...
- httpclient cookie相关介绍
http状态管理 cookie是HTTP代理和目标服务器可以交流保持回话的状态信息的令牌或短包. httpclient使用Cookie接口来代表抽象的cookie令牌,在它的简单形式中http的coo ...
随机推荐
- GC总结
概述 GC(Garbage Collection),需要完成的3件事 哪些内存需要回收? 什么时候回收? 如何回收? 为什么需要了解GC和内存分配?更好的监控和调节 排查各种内存溢出,内存泄漏 避免G ...
- [JavaWeb基础] 004.用JSP + SERVLET 进行简单的增加删除修改
上一次的文章,我们讲解了如何用JAVA访问MySql数据库,对数据进行增加删除修改查询.那么这次我们把具体的页面的数据库操作结合在一起,进行一次简单的学生信息操作案例. 首先我们创建一个专门用于学生管 ...
- 几个值得学习的Java博客
谈面试时从写一个单例开始究竟能问多深及终极解决方案 提到了<深入理解java虚拟器><java并发编程实践> 美团点评的技术博客:MySQL索引原理及慢查询优化 https: ...
- strlen 老瓶装新酒
前言 - strlen 概述 无意间扫到 glibc strlen.c 中代码, 久久不能忘怀. 在一无所知的编程生涯中又记起点点滴滴: 编程可不是儿戏 ❀, 有些难, 也有些不舍. 随轨迹一同重温, ...
- CVE-2019-7238 poc
from requests.packages.urllib3.exceptions import InsecureRequestWarning import urllib3 import reques ...
- 50个SQL语句(MySQL版) 问题四
--------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...
- itext7史上最全实战总结
1. itext7史上最全实战总结 1.1. 前言 最近有个需求需要我用Java手动写一份PDF报告,经过考察几种pdf开源代码,最终选取了itext7,此版本为7.1.11,由于发现网上关于该工具的 ...
- 【朝夕Net社区技术专刊】Core3.1 WebApi集群实战专题---WebApi环境搭建运行发布部署篇
欢迎大家阅读<朝夕Net社区技术专刊>第1期 原文是我在知乎发表的,现在在这里分享! 我们致力于.NetCore的推广和落地,为更好的帮助大家学习,方便分享干货,特创此刊!很高兴你能成为首 ...
- Chisel3 - util - MixedVec
https://mp.weixin.qq.com/s/mO648yx4_ZRedXSWX4Gj2g 可以容纳不同类型的变量的向量. 参考链接: https://github.com/freec ...
- Spring ( 二 ) IOC 依赖注入
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 1.什么是IOC IOC 全称指的是 Inverse Of Control 控制反转. 原来我们使用Sp ...