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机制的更多相关文章

  1. 和我一起学《HTTP权威指南》——客户端识别与cookie机制

    客户端识别与cookie机制 服务器需要区别是哪个客户端. 个性化接触 HTTP是匿名.无状态的请求/响应协议. Web站点希望: 对客户端的用户有更多的了解 追踪用户浏览页面的行为 因此,产生了几种 ...

  2. HTTP的客户端识别与cookie机制

    本文是<HTTP权威指南>的读书笔记 Web服务器可能同时在与数千个客户端同时进行会话,服务器需要记录下它们在与谁交谈,而不是认为所有的请求都来自于匿名客户端.在HTTP中可以有以下几种方 ...

  3. 前端学HTTP之客户端识别和cookie

    前面的话 Web服务器可能会同时与数千个不同的客户端进行对话.这些服务器通常要记录下它们在与谁交谈,而不会认为所有的请求都来自匿名的客户端.本文主要介绍客户端识别及cookie机制 HTTP首部 HT ...

  4. 计算机网络(HTTP)之客户识别:cookie机制

    什么是cookie? 承载用户相关信息的HTTP首部 cookie的工作原理 cookie的缺陷 一.什么是cookie? cookie是由服务器生成,发送给USER-Agent(一般是浏览器),(服 ...

  5. Cookie机制(会话cookie和持久化cookie)在客户端保持HTTP状态信息的方案

    1. Cookie只有一个name和一个value,不同于map;购物车设计的时候需要cookie,获取购物车的cookie id,以便于将物品多次放入购物车: 2.cookie获取了其地址,并且可以 ...

  6. [原创]java WEB学习笔记28: 会话与状态管理Cookie 机制

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. JWT的初步了解以及session、cookie机制

    1.什么是状态保持? 想要了解JWT,首先需要知道什么是状态保持,举一个例子来说:无论是在web上还是在手机app上,我们都可以以游客的身份访问,此时都会有登录/注册字眼,当我们登录之后,就会是我们的 ...

  8. Javaweb Cookie机制

    Javaweb Cookie机制 一.前言 HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个浏览器发出的 ,浏览器的每一次请求都是完全孤立的,即使 HTTP1.1 支持持续连 ...

  9. 因改漏洞而引申了解的Cookie机制!

    近期因为修改漏洞:Appscan扫描漏洞:加密会话(SSL)Cookie中缺少Secure属性,而涉及到Cookie有关的知识,现结合该漏洞的修复过程和了解的cookie知识总结一下. 一.加密会话( ...

随机推荐

  1. 4. Traffic monitoring tools (流量监控工具 10个)

    4. Traffic monitoring tools (流量监控工具 10个)EttercapNtop SolarWinds已经创建并销售了针对系统管理员的数十种专用工具. 安全相关工具包括许多网络 ...

  2. Oracle使用外部表批量创建用户

    整体思路:通过使用外部表将用户名导入Oracle的表中,然后通过PL/SQL遍历数据表,批量创建用户. 具体步骤如下: 1.在安装数据库的服务器的C盘根目录创建一个User List.txt文件,内容 ...

  3. c++ 创建线程以及参数传递

    //创建线程,传递参数 DWORD dwThreadID = ; HANDLE hThread = CreateThread(NULL, , MonitorThreadFunction, , & ...

  4. Centos7下使用yum源安装zabbix Server

    系统:Centos7 zabbix版本:4.2   一.Zabbix Server端   1.安装仓库 rpm -ivh https://repo.zabbix.com/zabbix/4.2/rhel ...

  5. 廖雪峰Git入门教程

    廖雪峰Git入门教程  2018-05-24 23:05:11     0     0     0 https://www.liaoxuefeng.com/wiki/00137395163059296 ...

  6. GDI与GDI+性能比较

    编写程序对GDI和GDI+绘制进行了比较,经过比较,GDI相对GDI+还是有一些性能优势的. 同时比较了每次绘制创建TGPGraphics对象和共用一个TGPGraphics对象的情况,两者性能相差不 ...

  7. 基于嵌入式linux路由转发功能的实现

    环境 arm7开发板, uclinux系统,kernel version: linux-2.4.x arm芯片的单网卡双网口设备,eth0 WAN口 ipaddr 192.168.9.61 eth0: ...

  8. 【如皋OJ】1127:正整数N转换成一个二进制数

    1127: 正整数N转换成一个二进制数 时间限制: 1 Sec  内存限制: 128 MB提交: 85  解决: 59[提交] [状态] [讨论版] [命题人:zhuzhigang] 题目描述 输入一 ...

  9. what is MAC address

    MAC Address:media access control address A media access control address (MAC address) is a unique id ...

  10. 子线程更新UI界面的2种方法

    一.一般我们都会在子线程完成一些耗时的操作. 1.Android中消息机制: 2.知识点: Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队, ...