`
xitong
  • 浏览: 6228529 次
文章分类
社区版块
存档分类
最新评论

基于HTTP协议的C/S架构中服务器如何获取用户身份

 
阅读更多

基于HTTP协议的C/S架构中服务器如何获取用户身份


HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。如果服务器需要辨别正在访问的用户信息有以下几种方法:
1、请求消息中的一些包含用户信息的HEADERS。
2、客户端IP地址;
3、用户登录ID和密码;
4、FAT URL,即在URL中嵌入用户信息;
5、使用Cookies。

实现用户身份识别的通常做法是:让浏览器在发送请求消息时在其中加入一些能够拥有用户身份识别的头域,如下表:


上表中,From头域是用户Email地址,显然,这种做法会泄露用户的私人信息,不够安全,很多浏览器不会允许这样做的。

User-Agent通常是指用户正在使用的浏览器版本,例如IE7、IE9、Chrome这样的值,这个信息对用户身份识别来说没什么用,充其量也只是反应当前客户的一些软件偏好。

Referer是指用户是从哪里链接到该网页的,例如一个用户通过google搜索到一个需要的网站,那么它在访问该网站时就会包含一个Referer头域: http://www.google.com这样的头域信息,这也能反应用户的某种上网习惯。

Authorization头域包含了用户的登录名和密码信息,这是一种应用非常广泛的用户身份识别手段,可以让服务端直接获取用户的身份,并作出相应的授权。

Client-ip也能反应用户的地址信息,例如我们在访问有些BBS时,页面上会显示欢迎来自XX省XX市的网友,服务器就是根据请求消息中的客户端IP地址来识别用户的地域信息。但这种方法对于动态IP地址通常会显示错误,尤其是那些只有一个统一出口的私网,该私网内所有用户的访问都会通过NAT映射为相同的出口IP地址。

X-Forwarded-For是指如果客户端消息经过 Proxy达到源服务器,那么Proxy会通过该头域记录原始客户端的IP地址,这样服务器既能得到Proxy的地址,也能得到真实客户端的IP。

Cookie是由服务器产生,发给并存储在Client端浏览器的文本文件(一般经过加密)。当用户再次访问该服务器时,就会读取相应的Cookies文件并发给服务器,服务器从而识别出用户。注意,Cookies的内容不能被缓存!


下面重点介绍cookies:

cookies可以分为两类:seesion cookies和persistent cookies。session cookie是一个临时cookie,它用来跟踪用户在浏览网页时的设置,在退出浏览器时session cookie会被自动删除;persistent cookies会一直存放在磁盘文件中(除非用户手动删除),它主要用来保存用户的配置和登陆账号等信息,这样,当用户下次再访问该网站时,可以不需要再输入账号了,浏览器会读取cookies的内容并自动填充用户表单信息。

当用户第一次访问某个网站时,Server对该用户一无所知,但Server认为该用户可能会再次光临,所以,Server会给该用户贴上一个唯一的cookie,这样当用户再次访问时,就能轻松的认出这个用户。
Server在响应消息中通过设置Set-Cookie或Set-Cookie2头域给用户返回一个cookies(通常包含一个id=value的键值对),用来标识当前访问的用户。这样,浏览器就存储了这个cookies,当用户再次访问这个网站时,浏览器在发送请求消息时会在Cookie头域中设置对应的id值,Server通过检索这个id值,就能识别出这个之前到访过的用户。整个流程如下图所示:
















分享到:
评论

相关推荐

    基于Linux 的防火墙技术研究

    具有用户级的身份验证,完备的日志记录和帐号管理等较包过滤器更加安全的功能。然而,许多代理机 制需要客户端修改软件或修改用户接口,使用户意识到正在使用代理服务器。而Linux 内核支持透明 代理服务功能,透明代理...

    微软活动目录管理管理简明手册

    在基于Windows 2000网络中,活动目录(Active Directory)是它的核心。活动目录是一个分布式的目录服务。网络信息可以分散在多台不同的计算机上,保证快速访问和容错;同时不管用户从何处访问或信息处在何处,对用户都...

    java开源包3

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    JAVA上百实例源码以及开源项目

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    JAVA上百实例源码以及开源项目源代码

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    3GPP-23501-g10(中文版).pdf

    5.6.6 建立 PDU 会话期间由 DN-AAA 服务器进行的二级身份验证/授权 106 5.6.7 应用功能对交通路由的影响 108 5.6.7.1 概述 108 5.6.7.2 在与 AFS 113 协调的基础上加强上行路径管理 5.6.8 选择性激活和停用现有 PDU ...

    Microsoft SQL Server 2005 Express Edition SP3

    Windows 加密服务提供程序 (CSP) 是执行身份验证、编码和加密服务的代码,基于 Windows 的应用程序通过 Windows Server 2003 中的 CryptoAPI 访问这些服务。如果停止或禁用 CSP 服务,则 SQL Server 安装程序会失败...

    java开源包1

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包11

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包2

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包6

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包5

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包10

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包4

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包8

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包7

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包9

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    java开源包101

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

    Java资源包01

    一个Java远程调用框架,它将原生Java对象序列化压缩装入HTTP中。它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源...

Global site tag (gtag.js) - Google Analytics