老生常谈session,cookie的区别,安全性

一,为什么session,cookie经常会有人提到

做web开发的人基本上都会用session和cookie,但是仅仅只是会用,并不知道session和cookie的真正的工作原理,都只是凭着感觉来猜测。web开发者只要利用它们来完成工作就行了,所以每个人的理解基本都会有大同小异,我想这就是session,cookie经常会被讨论的原因。本文也是根据个人经验,以及个人所学,对session,cookie的一些看法,纯属个人见解,希望得到大家的更正和建议。

二,什么cookie

cookie分为二种

1,以文件方式存在硬盘空间上的长期性的cookie

2,停留在浏览器所占内存中的临时性的cookie

浏览网站时,你会经常发现网站登录的地方,会有提示,问你是不是要记住自己的登录状态,像这种情况,登录时填写的一些信息会被以文件的方式存放在客户端的硬盘上。

当用户登录后,session会在cookie端产生一个session_id,这个session_id是存于浏览器所占用的内存当中。当你关闭浏览器后,session_id也要消失了。

cookie采用的是在客户端保持状态的方案,它是客户端的会话状态的一种储存机制。它是服务器在本地机器上存储的小段文本或者是内存中的一段数据,并随每一个请求发送至同一个服务器。IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范。网络服务器用HTTP头信息向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,或者本地内存中数据,它会自动将同一服务器的任何请求缚上这些cookies,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制借助于cookie机制来达到保存标识的目的,这样就可以解决HTTP协议无状态的缺陷。

三,什么是session

session是一种服务器端的信息管理机制,它把这些文件信息以文件的形势存放在服务器的硬盘空间上,这种情况是默认的,可以用memcache把这种数据放到内存里面。请参考web集群时利用memcache来同步session

当客户端向服务器发出请求时,要求服务器端产生一个session时,服务器端会先检查一下,客户端的cookie里面有没有session_id,是否已经过期。如果有这样的session_id的话,服务器端会根据cookie里的session_id把服务器的session检索出来。如果没有这样的session_id的话,服务器端会重新建立一个。PHPSESSID是一串加了密的字符串,它的生成按照一定的规则来执行。同一客户端启动二次session_start的话,session_id是不一样的。

Host *****************.com
User-Agent Mozilla/5.0 (X11; U; Linux i686; zh-CN; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6
Accept text/css,*/*;q=0.1
Accept-Language zh-cn,zh;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset UTF-8,*
Keep-Alive 115
Connection keep-alive
Referer http://***************.com/
Cookie BX=7f34kbl5d3m3g&b=3&s=9t; AWSUSER_ID=awsuser_id1267685109158r8091; PHPSESSID=us1o22h4iveo4uni3iksabreh4
If-Modified-Since Tue, 29 Jun 2010 07:55:38 GMT

上面是一次请求的头信息。

session产生的session_id放在cookie里面,如果用户把cookie禁止掉,是不是session也不能用了呢?禁止掉cookie后,session当然可以用,不过通过其他的方式来获得这个sessionid,比如,可以根在url的后面,或者以表单的形势提交到服务器端。从而使服务器端了解客户端的状态。

四,session和cookie谁更安全

就个人而言,我觉得session更安全一点,我以下几点看法。

1,如果session和cookie一样安全的话,二者就没有并要同时存在了,只要cookie就好了,让客户端来分提服务器的负担,并且对于用户来说又是透明的。何乐而不为呢。

2,session的sessionID是放在cookie里,要想功破session的话,第一要功破cookie。功破cookie后,你要得到 sessionID,sessionID是要有人登录,或者启动session_start才会有,你不知道什么时候会有人登录。第二,sessionID是加密的,第二次session_start的时候,前一次的sessionID就没有用了,session过期时sessionid也会失效,想在短时间内功破加了密的 sessionID很难。session是针对某一次通信而言,会话结束session也就随着消失了,而真正的cookie存在于客户端硬盘上的一个文本文件,谁安全很显然了。

3,如果session这么容易被功破,这么不安全的话,我想现有的绝大部分网站都不安全了。



1、作用域控制对象

(1)作用

表示一个对象的存在范围

(2)分类

A:当前jsp文件(当前jsp编译生成的类文件)

page  默认的

特例:包含指令实现包含效果时,在被包含文件中声明的对象。

B:具有明确请求传递关系的两个jsp文件

request:利用属性(一键一值)实现的对象存储。

request中属性存储的对象信息,会在接受请求的文件执行完成后自动清除

使用场景:页面转发效果时,进行的值的传递。

C:客户端信息的存储方式

第一种:用户(客户端)信息存储方式:用户信息全部由客户端实现存储和管理。

第二种:服务器端的信息存储。信息统一存储到服务器上。

技术上的实现:

客户端存储方式:Cookie

服务器端的信息存储:Session application

2、Cookie

(1)理解

“小甜饼”。存储在客户端机器浏览器临时目录中,实现用户基本信息存储的临时文本文件。

(2)特征

A:是文本文件

B:是临时性的文本文件。

C:文件的大小一般不超过1K

D:存储在浏览器的临时目录

E:默认的,COOKIE对于浏览器不兼容,对WEB应用程序共享

F:cookie以名称与值的方式存储用户的基本信息。

G:存储信息的作用域是:一个浏览器访问的多个页面

H:cookie会泄露用户个人隐私

I:cookie是会被客户端禁用的

(3)应用

A:创建cookie

Cookie  cookie=new Cookie("名称",“值”);

一个cookie只能存储一个值,一个Cookie文件可以存储多个Cookie

B:指定cookie的生效期

明确cookie文件的存在时间。

cookie的分类:会话级ccokie和永久性cookie。

会话级cookie:cookie只在当前用户访问过程中,在缓存中存在。用户一退出,cookie自动清除。程序上的体现:不指定cookie的保存时间。

永久性cookie:一明确cookie的存在时间了,cookie文件就会在客户端机器中创建。一创建,就认为是永久性的。

cookie.setMaxAge(int)--->秒为单位

C:输出cookie

在客户端建立文本

response.addCookie(cookie)

D:从客户端获得Cookie

request.getCookies()---->数组。客户端当前浏览器中所有cookie组成的集合。

如何查看服务器端输送到我们电脑中的这些Cookie信息:

and Session" title="苏斌老师讲解:作用域控制对象、Cookie and Session">
     点开IE浏览器或其他浏览器,在菜单栏中有工具选项,点开有InterNet选项:
      and Session" title="苏斌老师讲解:作用域控制对象、Cookie and Session">
    Cookie名称、来源、文件格式(文本文件)、文件大小(1K之内)and Session" title="苏斌老师讲解:作用域控制对象、Cookie and Session">
   Cookie有效期
and Session" title="苏斌老师讲解:作用域控制对象、Cookie and Session">

双击一个Cookie文件,我们可以看到以*分割的信息:
and Session" title="苏斌老师讲解:作用域控制对象、Cookie and Session">

(4)集合应用场景

cookie版的计数器:欢迎。。。光临,这是您第?次访问本站。

记录客户简单的喜好信息:亚马逊

4、客户端信息的跟踪方式

如何识别客户信息:

(1)利用cookie

(2)利用url重写

(3)隐藏域

(4)session

5、session

(1)理解

会话。客户端与服务器端的一组信息的交互。

(2)作用

服务器缓存上,分配出来的,存储单个用户信息的空间。

(3)特点

A:session存储的信息是在服务器的缓存上存储的

B:每个用户,只要一访问web应用(典型的登录),服务器马上会为此用户分配一个独立的缓存空间

C:每个session。系统都会自动产生一个唯一标记的SessionID,用于区别。此id称为jsessionid、SessionID,以会话级cookie的方式存储的客户端缓存上。用于区分每一个用户。

D:session中可以存储任何的对象信息(典型的购物车)

E:session是有生效期的,执行的是会话超时的工作机制。Tomcat中默认时间是30分钟。IIS中默认二十分钟。

F:session中的信息,是在一个用户在一个浏览器中的不同页面上共享的(注意区别:Cookie是在同一个浏览器的所有页面中可以共享)。

时间: 2024-10-25 23:22:52

老生常谈session,cookie的区别,安全性的相关文章

session与cookie的区别<转载>

我所知道的有以下区别:       1.session保存在服务器,客户端不知道其中的信息:cookie保存在客户端,服务器能够知道其中的信息.       2.session中保存的是对象,cookie中保存的是字符串.       3.session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访问到.而cookie中如果设置了路径参数,那么同一个网站中不同路径下的cookie互相是访问不到的.       4.session需要借助cookie才能正常

session & Cookie 简述

Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间.而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据.这一过程,是不用开发人员干预的.所以一旦客户端禁用Cookie,那么Session也会失效. 服务器也可以通过URL重写的方式来传递SessionID的

session cookie原理及应用

一.术语session在我的经验里,session这个词被滥用的程度大概仅次于transaction,更加有趣的是transaction与session在某些语境下的含义是相同的. session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session.有时候我们可以看到这样的话“在一个浏览器会话期间,...”,这里的会话一词用的就是其本义,是指从一个浏览器窗口打开到关闭这个期间 ①.最混乱的是“用户(客

Application,Session,Cookie,ViewState和Cache区别

在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 整个应用程序/所有用户 服务器端 Cache 任意大小 可以根据需要设定 整个应用程序/所有用户 服务器端 Session 小量,简单的数据 用户活动时间+一段延迟时间(一般为20分钟) 单个用户 服务器端 Cook

session 和 cookie 的区别与联系

1.创建一个新的Cookie Cookie cookie = new Cookie("username",name); 2.设置cookie在客户端上存活多久 cookie.setMaxAge(30*60); 3.把cookie发送到客户 response.addCookie(cookie); 4.从客户请求得到cookie(或多个cookie) Cookie[]    cookies=request.getCookies(); for(int i=0-;i<cookies.le

(进阶篇)浅谈COOKIE和SESSION关系和区别

COOKIE介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 cookie 的值. 1.设置Cookie PHP用SetCookie函数来设置Cookie. SetCookie函数定义了一个Cookie,并且把它附加在HTTP头的后面,SetCookie函数的原型如下: int SetCookie(string name, string value, int exp

ASP.NET Application,Session,Cookie和ViewState等对象用法和区别 (转)

在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保存时间 应用范围 保存位置 Application 任意大小 整个应用程序的生命期 整个应用程序/所有用户 服务器端 Cache 任意大小 可以根据需要设定 整个应用程序/所有用户 服务器端 Session 小量,简单的数据 用户活动时间+一段延迟时间(一般为20分钟) 单个用户 服务器端 Cook

PHP中常用的超全局变量 表单中get和post提交方式的区别 session与cookie的区别 GD库是做什么用的

PHP中常用的超全局变量 $_GET ----->get传送方式$_POST ----->post传送方式$_REQUEST ----->可以接收到get和post两种方式的值$GLOBALS ----->所有的变量都放在里面$_FILES ----->上传文件使用$_SERVER ----->系统环境变量$_SESSION ----->会话控制的时候会用到$_COOKIE ----->会话控制的时候会用到 表单中get和post提交方式的区别 get是把参

浅谈session,cookie,sessionStorage,localStorage的区别及应用场景

浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务端进行数据交互. 一.cookie和session cookie和session都是用来跟踪浏览器用户身份的会话方式. 区别: 1.保持状态:cookie保存在浏览器端,session保存在服务器端 2.使用方式: (1)cookie机制:如果不在浏览器中设置过期时间,cookie被保存在内存中,生命周期随浏览器的关闭而结束,这种cookie简称会话cookie.如果在浏览器中设置了cookie