Cookie概念html
在浏览某些 网站 时,这些网站会把 一些数据存在 客户端 , 用于使用网站 等跟踪用户,实现用户自定义 功能.程序员
是否设置过时时间:web
若是不设置 过时时间,则表示这个 Cookie生命周期为 浏览器会话期间 , 只要关闭浏览器,cookie就消失了.浏览器
这个生命期为浏览会话期的cookie,就是会话Cookie;安全
存储: 通常保存在 内存,不在硬盘;服务器
若是设置了过时时间, 浏览器会把cookie保存在硬盘上,关闭再打开浏览器, 这些cookie 依然有效直到 超过的设置过时时间;cookie
存储在硬盘上的Cookie能够在不一样的浏览器进程间共享,好比两个IE窗口。
而对于保存 在内存的Cookie,不一样的浏览器有不一样的处理方式。
原理:
若是浏览器使用的是 cookie,那么全部的数据都保存在浏览器端,
好比你登陆之后,服务器设置了 cookie用户名(username),那么,当你再次请求服务器的时候,浏览器会将username一块发送给服务器,这些变量有必定的特殊标记。
服 务器会解释为 cookie变量。
因此只要不关闭浏览器,那么 cookie变量便一直是有效的,因此可以保证长时间不掉线。
若是你可以截获某个用户的 cookie变量,而后伪造一个数据包发送过去,那么服务器仍是认为你是合法的。因此,使用 cookie被攻击的可能性比较大。
若是设置了的有效时间,那么它会将 cookie保存在客户端的硬盘上,下次再访问该网站的时候,浏览器先检查有没有 cookie,若是有的话,就读取该 cookie,而后发送给服务器。
若是你在机器上面保存了某个论坛 cookie,有效期是一年,若是有人入侵你的机器,将你的 cookie拷走,而后放在他的浏览器的目录下面,那么他登陆该网站的时候就是用你的的身份登陆的。
因此 cookie是能够伪造的。
固然,伪造的时候须要主意,直接copy cookie文件到 cookie目录,浏览器是不认的,
他有一个index.dat文件,存储了 cookie文件的创建时间,以及是否有修改,因此你必须先要有该网站的 cookie文件,而且要从保证时间上骗过浏览器,
曾经在学校的vbb论坛上面作过试验,copy别人的 cookie登陆,冒用了别人的名义发帖子,彻底没有问题。
cookie 用法:
setcookie("user","zy",time()+3600); 设置user为zy,一小时以后失效;
$_COOKIE['user']; 取回user值(名字)
setcookie("user","",time()-3600); 删除cookie,第二个参数为空,第三个时间设置为小于系统的当前时间便可.
或在浏览器设置
在使用Cookie时,Cookie自动生成一个文本文件存储在IE浏览器的Cookie临时文件夹中,应用浏览器删除Cookie文件的具体操做步骤为
>选择IE浏览器中的工具/internet选项命令,打开Internet选项对话框,
>在常规选项卡中单击删除Cookie按钮,在弹出的对话框中单击肯定按钮,便可成功删除所有Cookie文件.
Session的概念session
Session 是存放在服务器端的相似于HashTable结构(每一种web开发技术的实现可能不同,下文直接称之为HashTable)来存放用户数据;
做用:实现网页之间数据传递,是一个存储在服务器端的对象集合。
原理:当用户请求一个Asp.net页面时,系统将自动建立一个Session;退出应用程序或关闭服务器时,该Session撤销。系统在建立Session时将为其分配一个长长的字符串标识,以实现对Session进行管理与跟踪。
session机制是一种服务器端的机制,服务器使用一种相似于散列表的结构(也可能就是使用散列表)来保存信息。并发
保存:app
存储在Server段的内存进程中的,而这个进程至关不稳定,常常会重启,这样重启的话,就会形成Session失效,用户就必需要从新登陆,用户体验至关差,好比用户在填写资料,快要结束的时候Session失效,直接跳到登陆页面;
是否已经建立过session:
当程序须要为某个客户端的请求建立一个session时,服务器首先检查这个客户端的请求里是否已包含了一个session标识(称为session id),
若是已包含则说明之前已经为此客户端建立过session,服务器就按照session id把这个session检索出来....使用(检索不到,会新建一个),
若是客户端请求不包含session id,则为此客户端建立一个session而且生成一个与此session相关联的session id,
session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个session id将被在本次响应中返回给客户端保存。
(总结: 建立一个session时,服务器看这个客户端 是否包含session标识, 是的话按照session id把session检索出来,不然就得 新建一个.)
Session的客户端实现形式(即Session ID的保存方法):
通常浏览器提供了两种方式来保存,还有一种是程序员使用html隐藏域的方式自定义实现:
[1] 使用Cookie来保存,这是最多见的方法,本文“记住个人登陆状态”功能的实现正式基于这种方式的。
服务器经过设置Cookie的方式将Session ID发送到浏览器。
若是咱们不设置这个过时时间,那么这个Cookie将不存放在硬盘上,当浏览器关闭的时候,Cookie就消失了,这个Session ID就丢失了。
若是咱们设置这个时间为若干天以后,那么这个Cookie会保存在客户端硬盘中,即便浏览器关闭,这个值仍然存在,下次访问相应网站时,同 样会发送到服务器上。
[2] 使用URL附加信息的方式,也就是像咱们常常看到JSP网站会有aaa.jsp?JSESSIONID=*同样的。这种方式和第一种方式里面不设置Cookie过时时间是同样的。(URL重写,就是把session id直接附加在URL路径的后面。)
[3] 第三种方式是在页面表单里面增长隐藏域,这种方式实际上和第二种方式同样,只不过前者经过GET方式发送数据,后者使用POST方式发送数据。可是明显后者比较麻烦。
表单隐藏字段就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时可以把session id传递回服务器。好比:
<form name="testform" action="/xxx">
<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764">
<input type="text">
</form>
实际上这种技术能够简单的用对action应用URL重写来代替。
session 用法:
用户信息保存到session前,先启动;
session_start(); 启动session
$_SESSION['user']="zy"; 设置用户名
unset($_SESSION['user']); 销毁用户名
session_destory(); 失去已经存储的session的数据
cookie 和session 的区别:
一、cookie数据存放在客户的浏览器上,session数据放在服务器上.
简单的说,当你登陆一个网站的时候,若是web服务器端使用的是session,那么全部的数据都保存在服务器上面,
客户端每次请求服务器的时候会发送 当前会话的session_id,服务器根据当前session_id判断相应的用户数据标志,以肯定用户是否登陆,或具备某种权限。
因为数据是存储在服务器 上面,因此你不能伪造,可是若是你可以获取某个登陆用户的session_id,用特殊的浏览器伪造该用户的请求也是可以成功的。
session_id是服务 器和客户端连接时候随机分配的,通常来讲是不会有重复,但若是有大量的并发请求,也不是没有重复的可能性,我曾经就遇到过一次。
登陆某个网站,开始显示的 是本身的信息,等一段时间超时了,一刷新,竟然显示了别人的信息。
Session是由应用服务器维持的一个服务器端的存储空间,用户在链接服务器时,会由服务器生成一个惟一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。因此一旦客户端禁用Cookie,那么Session也会失效。
二、cookie不是很安全,别人能够分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
三、session会在必定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。
四、单个cookie保存的数据不能超过4K,不少浏览器都限制一个站点最多保存20个cookie。(Session对象没有对存储的数据量的限制,其中能够保存更为复杂的数据类型)
注意:
session很容易失效,用户体验不好;
虽然cookie不安全,可是能够加密 ;
cookie也分为永久 和暂时 存在的;
浏览器 有禁止cookie功能 ,但通常用户都不会设置;
必定要设置失效时间,要否则浏览器关闭就消失了;
例如:
记住密码功能就是使用永久cookie写在客户端电脑,下次登陆时,自动将cookie信息附加发送给服务端。
application是全局性信息,是全部用户共享的信息,如能够记录有多少用户如今登陆过本网站,并把该信息展现个全部用户。
二者最大的区别在于生存周期,一个是IE启动到IE关闭.(浏览器页面一关 ,session就消失了)
一个是预先设置的生存周期,或永久的保存于本地的文件。(cookie)
此文为转载