带你了解session和cookie作⽤原理区别和⽤法
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,第⼆个参数为空,第三个时间设置为⼩于系统的当前时间即可.
或在浏览器设置
session如何设置和读取在使⽤Cookie时,Cookie⾃动⽣成⼀个⽂本⽂件存储在IE浏览器的Cookie临时⽂件夹中,应⽤浏览器删除Cookie⽂件的具体操作步骤为
>选择IE浏览器中的⼯具/internet选项命令,打开Internet选项对话框,
>在常规选项卡中单击删除Cookie按钮,在弹出的对话框中单击确定按钮,即可成功删除全部Cookie⽂件.
Session的概念
Session 是存放在服务器端的类似于HashTable结构(每⼀种web开发技术的实现可能不⼀样,下⽂直接称之为HashTable)来存放⽤户数据;
作⽤:
实现⽹页之间数据传递,是⼀个存储在服务器端的对象集合。
原理:
当⽤户请求⼀个Asp页⾯时,系统将⾃动创建⼀个Session;退出应⽤程序或关闭服务器时,该Ses
sion撤销。系统在创建Session时将为其分配⼀个长长的字符串标识,以实现对Session进⾏管理与跟踪。
session机制是⼀种服务器端的机制,服务器使⽤⼀种类似于散列表的结构(也可能就是使⽤散列表)来保存信息。
保存:
存储在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 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上.
简单的说,当你登录⼀个⽹站的时候,如果web服务器端使⽤的是session,那么所有的数据都保存在服务器上⾯,客户端每次请求服务器的时候会发送当前会话的session_id,服务器根据当前session_id判断相应的⽤户数据标志,以确定⽤户是否登录,或具有某种权限。
由于数据是存储在服务器上⾯,所以你不能伪造,但是如果你能够获取某个登录⽤户的session_id,⽤特殊的浏览器伪造该⽤户的请求也是能够成功的。
session_id是服务器和客户端链接时候随机分配的,⼀般来说是不会有重复,但如果有⼤量的并发请求,也不是没有重复的可能性,我曾经就遇到过⼀次。
登录某个⽹站,开始显⽰的是⾃⼰的信息,等⼀段时间超时了,⼀刷新,居然显⽰了别⼈的信息。
Session是由应⽤服务器维持的⼀个服务器端的存储空间,⽤户在连接服务器时,会由服务器⽣成⼀个唯⼀的SessionID,⽤该SessionID 为标识符来存取服务器端的Session存储空间。⽽SessionID这⼀数
据则是保存到客户端,⽤Cookie保存的,⽤户提交页⾯时,会将这⼀ SessionID提交到服务器端,来存取Session数据。这⼀过程,是不⽤开发⼈员⼲预的。所以⼀旦客户端禁⽤Cookie,那么Session也会失效。
2、cookie不是很安全,别⼈可以分析存放在本地的COOKIE并进⾏COOKIE欺骗考虑到安全应当使⽤session。
3、session会在⼀定时间内保存在服务器上。当访问增多,会⽐较占⽤你服务器的性能考虑到减轻服务器性能⽅⾯,应当使⽤COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制⼀个站点最多保存20个cookie。(Session对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型)
注意:
session很容易失效,⽤户体验很差;
虽然cookie不安全,但是可以加密 ;
cookie也分为永久和暂时存在的;
浏览器有禁⽌cookie功能 ,但⼀般⽤户都不会设置;
⼀定要设置失效时间,要不然浏览器关闭就消失了;
例如:
记住密码功能就是使⽤永久cookie写在客户端电脑,下次登录时,⾃动将cookie信息附加发送给服务端。
application是全局性信息,是所有⽤户共享的信息,如可以记录有多少⽤户现在登录过本⽹站,并把该信息展⽰个所有⽤户。
两者最⼤的区别在于⽣存周期,⼀个是IE启动到IE关闭.(浏览器页⾯⼀关 ,session就消失了)
⼀个是预先设置的⽣存周期,或永久的保存于本地的⽂件。(cookie)
以上就是⼩编为⼤家整理的session和cookie作⽤原理,区别和⽤法的全部内容啦,希望对⼤家的学习有所帮助~
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论