欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Session与Cookie的区别与使用

程序员文章站 2024-03-19 22:44:40
...

HTTP是一种无状态的协议,为了分辨链接是谁发起的,需自己去解决这个问题。不然有些情况下即使是同一个网站每打开一个页面也都要登录一下。而Session和Cookie就是为解决这个问题而提出来的两个机制。

cookie 和session 的区别:

Session
存储在服务器端,保存用户名、登陆状态等信息
Cookie
由服务器下发给客户端,保存在客户端的一个文件里,保存的内容主要包括:SessionID。

应用场景

登录网站,今输入用户名密码登录了,第二天再打开很多情况下就直接打开了。这个时候用到的一个机制就是cookie。 session一个场景是购物车,添加了商品之后客户端处可以知道添加了哪些商品,而服务器端如何判别呢,所以也需要存储一些信息就用到了session。

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的概念

  Session 是存放在服务器端的类似于HashTable结构(每一种web开发技术的实现可能不一样,下文直接称之为HashTable)来存放用户数据;

作用:

  实现网页之间数据传递,是一个存储在服务器端的对象集合。

原理:

  当用户请求一个Asp.net页面时,系统将自动创建一个Session;退出应用程序或关闭服务器时,该Session撤销。系统在创建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_start();                     启动session
$_SESSION['user']="zy";      设置用户名
unset($_SESSION['user']);    销毁用户名
session_destory();                失去已经存储的session的数据