HTTP客户端识别与Cookie机制
HTTP识别用户的几种技巧
- 承载用户身份信息的HTTP首部
- 客户端IP地址跟踪,通过用户的IP地址对其进行识别
- 用户登录,用认证方式识别用户
- 胖URL,一种在URL中潜入识别信息的技术
- cookie,一种强大高效的持久身份识别技术
一,承载用户相关信息的HTTP首部
- from 用户的email地址
少用 - user-agent 用户的浏览器软件
将用户所用的浏览器信息告知服务器 - referer 用户是从这个页面跳转过来的
提供用户来源页的URL - anthorization 用户名和密码
- client-ip 客户端ip
- x-forwarded-for 客户端ip
- cookie 服务器生成的id标签
二,客户端IP地址
早期web先锋尝试将客户端IP地址作为一种表示形式使用
缺点:
使用ip来标识客户端,存在很多缺点。
客户端ip描述的是机器,不是用户。
很多因特网机器是动态随机分配ip。
如果通过代理和网关访问服务器,那么得到的是代理的ip,而不是客户端的。
三,用户登录
直接主动让用户登录来识别用户,作为标识。
可以向浏览器发送一条http响应代码是401 Login Required,并添加www-authentication首部,
然后浏览器就会显示一个登录对话框。只要用户输入对了用户名和密码,服务器就可以识别用户了。
浏览器每次在请求中,向服务器发送authorization首部作为一种身份的标志。
缺点:
登陆多个web站点太繁琐,站点浏览跳转时需要在每个站点登陆,还可能需要记住不同密码。
四,胖URL
web站点为每个用户生成特定的URL来追踪用户的身份,一般是对真正的URL进行拓展,在URL开始或结束的地方追加一些状态信息
这种包含了用户状态信息的URL称为胖URL
缺点:
- 丑陋的URL
- 无法共享URL
因为url中有用户信息,共享会透露个人信息 - 破坏缓存
每个人的URL都不一样,所以不需要缓存了 - 额外的服务器负荷
- 非持久
五,cookie
cookie是当前用户识别,实现持久会话最好的方式
cookie类型
- 会话cookie
浏览器退出,会话cookie就会删除 - 持久cookie
在设置的时间内不会删除
cookie是如何工作的
用户首次访问站点的时候,web服务器对用户一无所知。web服务器希望这个用户会再次回来,所以给这个
用户一个独有的cookie。cookie中包含了一个由名字=值构成的任意列表。通过设置set-cookie,或
set-cookie2http响应首部,设置cookie值。浏览器会记住从服务器返回的set-cookie首部中的内容,
并将cookie集存储到浏览器的cookie数据库中。将来用户访问同一个站点时,浏览器会将cookie中的值
放在cookie首部,传给服务器。
cookie灌:客户端状态
cookie的基本思想就是让浏览器积累一组服务器的信息,每次访问服务器,都将这些信息提供给他。
因此浏览器要负责存储cookie信息,所以称之为客户端状态。
- 网景的cookie 网景将cookie存储在一个名为cookie.txt的文本文件中。每一行代表一个cookie,有7个tab分割的字段。
- 微软的internet explorer的cookie
微软的IE讲cookie储存在高速缓存目录下独立的文本文件中
不同站点使用不同的cookie
浏览器内部的cookie罐中可以有成百上千个cookie,但浏览器不会将每个cookie都发送给所有的站点,实际上,通常只向每个站点发送2-3个cookie,原因如下:
- 对所有这些cookie字节进行传输会严重降低性能。
- cookie中包含的服务器特有的名值对,所以对大部分站点来说,大多数cookie都只是无法识别的误用数据
- 将所有的cookie发送给所有站点会引发潜在的隐私问题。
总之,浏览器只向服务器发送服务器产生的那些cookie。
cookie的域属性
产生cookie的服务器可以向set-cookie响应首部添加一个Domain属性来控制哪些站点可以看到那些cookie,
cookie路径属性
cookie规范甚至允许用户将cookie与部分web站点关联起来,可以通过Path属性来实现这一功能,在这个属性列出的URL路径前缀下所有的cookie都是有效的。因此cookie就是由服务器贴到客户端上,由客户端维护的状态片段,只会回送给那些合适的站点,下面我们来更仔细地看看cookie的技术和标准。
cookie成分
cookie0与cookie1
cookie0:
name=value 服务器可以创建任意的name=value关联
expires 可选的,过期时间
domain 可选的,浏览器只向指定的域中的服务器主机名发送cookie。如果没有设置,就默认产生set-cookie响应的服务器主机名。
path 可选的,可以为服务器上特定的文档产生cookie。如果没有设置,默认是产生这个响应的url的路径。
secure 可选的,只有在使用ssl,才会发送cookie。
客户端发送请求时,会将所有与域、路径、和安全过滤器相匹配的、未过期的cookie都发送给这个站点。
cookie:
允许浏览器退出时,强制销毁cookie
使用相对秒数,来控制cookie的生存时间
通过url端口号,控制cookie作用域
为实现互操作性,实现的版本号
cookie会话跟踪
可以用cookie在用户与某个web站点进行多项事物处理时对用户进行跟踪,电子商务web站点用会话cookie在用户浏览时记录下用户购物车信息。
cookie与缓存
- 要特别小心,不能分配用过的cookie,不能向用户展示其他人私有文档的内容
- 如果向多个用户发送了相同的SetCookier首部,可能会破坏用户的定位
cookie,安全性和隐私
cookie是可以禁止的,并且可以通过日志分析和其他方式实现大部分跟踪记录。cookie自身不是很大的安全隐患。
但是潜在的滥用情况,总是存在的。第三方站点使用持久cookie跟踪用户就是一种最大的滥用。这种与ip地址和
referer首部结合起来,营销公司就可以构建相当准确的用户档案和浏览模式。
如果小心的使用cookie,那么cookie带来的好处还是要大于风险的。
javascript设置,读取,删除cookie方法
JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的。
而cookie是运行在客户端的,所以可以用JS来设置cookie.
cookie是以键值对的形式保存的,即key=value的格式。各个cookie之间一般是以“;”分隔。
JS设置cookie
document.cookie="name="+username;
// 加上终止时间
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
JS读取cookie
直接document.cookie就可以获取,但要获取指定名称的cookie值需要这样做:
// 该函数返回名称为name的cookie值,如果不存在则返回空,其实现如下:
<script language="JavaScript" type="text/javascript">
<!--
function getCookie(name){
var strCookie=document.cookie;
var arrCookie=strCookie.split("; ");
for(var i=0;i<arrCookie.length;i++){
var arr=arrCookie[i].split("=");
if(arr[0]==name)return arr[1];
}
return "";
}
//-->
</script>
删除cookie
为了删除一个cookie,可以将其过期时间设定为一个过去的时间,例如:
//获取当前时间
var date=new Date();
//将date设置为过去的时间
date.setTime(date.getTime()-10000);
//将userId这个cookie删除
document.cookie="userId=828; expires="+date.toGMTString();
方法封装
var cookie = {
set:function(key,val,time){//设置cookie方法
var date=new Date(); //获取当前时间
var expiresDays=time; //将date设置为n天以后的时间
date.setTime(date.getTime()+expiresDays*24*3600*1000); //格式化为cookie识别的时间
document.cookie=key + "=" + val +";expires="+date.toGMTString(); //设置cookie
},
get:function(key){//获取cookie方法
/*获取cookie参数*/
var getCookie = document.cookie.replace(/[ ]/g,""); //获取cookie,并且将获得的cookie格式化,去掉空格字符
var arrCookie = getCookie.split(";") //将获得的cookie以"分号"为标识 将cookie保存到arrCookie的数组中
var tips; //声明变量tips
for(var i=0;i<arrCookie.length;i++){ //使用for循环查找cookie中的tips变量
var arr=arrCookie[i].split("="); //将单条cookie用"等号"为标识,将单条cookie保存为arr数组
if(key==arr[0]){ //匹配变量名称,其中arr[0]是指的cookie名称,如果该条变量为tips则执行判断语句中的赋值操作
tips=arr[1]; //将cookie的值赋给变量tips
break; //终止for循环遍历
}
},
delete:function(key){ //删除cookie方法
var date = new Date(); //获取当前时间
date.setTime(date.getTime()-10000); //将date设置为过去的时间
document.cookie = key + "=v; expires =" +date.toGMTString();//设置cookie
}
return tips;
}
}
使用方式:
cookie.get("uesr"); // 获取键名为user的cookie
cookies,sessionStorage和localStorage的区别
以前持久化的存储一些有用的数据一般是通过服务器端的数据库或者浏览器端的cookie来实现
随着HTML5的出现,web开发又有了两种选择:Web Storage和Web SQL Database.
Web Storage有两种形式
localStorage(本地存储)和sessionStorage(会话存储)
- localStorage:浏览器关闭了数据仍然可以保存下来,并可用于所有同源(相同的域名、协议和端口)窗口(或标签页)永久存储,永不失效,除非手动删除
- sessionStorage:数据存储在窗口对象中,窗口关闭后对应的窗口对象消失,存储的数据也会丢失。就是浏览器窗口关闭就失效了。
使用
使用 local storage和session storage主要通过在js中操作这两个对象来实现,分别为window.localStorage和window.sessionStorage. 这两个对象均是Storage类的两个实例,
Storage类的属性和方法。
cookie与session的区别于联系
- cookie与session的区别:cookie数据保存在客户端,session数据保存在服务器端
- cookie和session的共同之处:cookie和session都是用来跟踪浏览器用户身份的会话方式。
HTTP客户端识别与Cookie机制的更多相关文章
- 和我一起学《HTTP权威指南》——客户端识别与cookie机制
客户端识别与cookie机制 服务器需要区别是哪个客户端. 个性化接触 HTTP是匿名.无状态的请求/响应协议. Web站点希望: 对客户端的用户有更多的了解 追踪用户浏览页面的行为 因此,产生了几种 ...
- HTTP的客户端识别与cookie机制
本文是<HTTP权威指南>的读书笔记 Web服务器可能同时在与数千个客户端同时进行会话,服务器需要记录下它们在与谁交谈,而不是认为所有的请求都来自于匿名客户端.在HTTP中可以有以下几种方 ...
- 前端学HTTP之客户端识别和cookie
前面的话 Web服务器可能会同时与数千个不同的客户端进行对话.这些服务器通常要记录下它们在与谁交谈,而不会认为所有的请求都来自匿名的客户端.本文主要介绍客户端识别及cookie机制 HTTP首部 HT ...
- 计算机网络(HTTP)之客户识别:cookie机制
什么是cookie? 承载用户相关信息的HTTP首部 cookie的工作原理 cookie的缺陷 一.什么是cookie? cookie是由服务器生成,发送给USER-Agent(一般是浏览器),(服 ...
- Cookie机制(会话cookie和持久化cookie)在客户端保持HTTP状态信息的方案
1. Cookie只有一个name和一个value,不同于map;购物车设计的时候需要cookie,获取购物车的cookie id,以便于将物品多次放入购物车: 2.cookie获取了其地址,并且可以 ...
- [原创]java WEB学习笔记28: 会话与状态管理Cookie 机制
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- JWT的初步了解以及session、cookie机制
1.什么是状态保持? 想要了解JWT,首先需要知道什么是状态保持,举一个例子来说:无论是在web上还是在手机app上,我们都可以以游客的身份访问,此时都会有登录/注册字眼,当我们登录之后,就会是我们的 ...
- Javaweb Cookie机制
Javaweb Cookie机制 一.前言 HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个浏览器发出的 ,浏览器的每一次请求都是完全孤立的,即使 HTTP1.1 支持持续连 ...
- 因改漏洞而引申了解的Cookie机制!
近期因为修改漏洞:Appscan扫描漏洞:加密会话(SSL)Cookie中缺少Secure属性,而涉及到Cookie有关的知识,现结合该漏洞的修复过程和了解的cookie知识总结一下. 一.加密会话( ...
随机推荐
- Javascript 3.3 编写DOM脚本的四个基本方法
id属性的用途是给某个元素加上独一无二的标识符,搭配"#"使用 class搭配"."使用 getElementById()方法:方法名称的大小写不能写错,方法将 ...
- 网络操作基础(one)
P12 一.什么是网络操作系统?网络操作系统具有哪些基本功能? 二.网络操作系统具有哪些特征? 三.常用的网络操作系统有哪些?它们各具有什么特点? 四.在网络操作系统中主要可提供哪些? ———— —— ...
- 查看celery 队列长度
BROKER_URL = 'redis://127.0.0.1:6379/2' quque 名称:celery 查询队列长度命令: redis-cli -n 2 llen celery 注释: -n: ...
- 谈一谈java中的Canves机制
0--写在前面: 很多初学java的童鞋,常常很苦恼,一天天的都跟命令行较劲,好像很无聊的样子,如果能跳出命令行做出界面甚至一个画图界面,那将是一件很兴奋的事情:也可以让编程变的有趣:有脑洞的同学还可 ...
- 保卫"木叶",从火影剧情看网站攻防的演变
精彩故事即将上演,敬请期待 一.下忍考试 关键词:内鬼.已知攻击.后门 二.佩恩入侵 关键词:未知攻击.零日漏洞 三.忍界大战 关键词:CC攻击.批量注册.模拟攻击 -- 时间过去很久,火影篇太多情节 ...
- Java(常用排序算法)
冒泡排序 比较相邻的元素.如果第一个比第二个大,就交换他们两个,对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的元素重复以上的步骤,除了最 ...
- 一个简单的例子了解states
在大规模的配置管理工作中,我们要编写大量的states.sls文件.top.sls是states系统的入口文件,它负责指定哪些设备调用哪些states.sls文件.statse的默认工作目录是在/sr ...
- c# 坑人的发邮件组件
System.Net.Mail 在服务器25端口被封禁的情况下,无法使用其它诸如SSL 465端口发送.用过时的System.Web.Mail却可以.是微软更新速度太快呢,还是标准不一致呢. Syst ...
- Linux----------ftp的介绍及安装使用
目录 一.ftp简介 二.常用的ftp软件有: 三.ftp数据连接模式 3.1命令连接是指文件管理类命令,始终保持连接,直到用户退出 3.2数据连接是指数据传输时创建和关闭的连接 四.用户验证方式 4 ...
- [Mybatis]Mybatis 常用标签及功能整理
Mybatis中生成动态SQL的标签有四类,分别是: if choose (when, otherwise) trim (where, set) foreach 1.if 当需要动态生成where条件 ...