PHP中的session与cookie理解

PHP session 变量用于存储有关用户会话的信息,或更改用户会话的设置。Session 变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用。

理解:session用于单一用户与服务器的交互,每个用户的session都是不一样的。session作为全局变量,在浏览器开启期间所有页面内有效。

Session 的工作机制是:为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过 URL 进行传导。

在把用户信息存储到 PHP session 中之前,首先必须启动会话。

注释:session_start() 函数必须位于 <html> 标签之前

可用于方便地页面间交互,可以把数组放入session。比POST好用,就怕seesion太多会不会影响性能啊?

如果您希望删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。

unset() 函数用于释放指定的 session 变量;session_destroy() 函数彻底终结 session。

**********************************************************************************

cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。

理解:cookie保存在用户计算机中,用于存储用户信息更方便。

语法:setcookie(name, value, expire, path, domain);

例:setcookie("user", "Alex Porter", time()+3600);    //看样子,是给Alex一小时的时间,后面时间参数是截止日期

echo $_COOKIE["user"];

注释:在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码

当删除 cookie 时,您应当使过期日期变更为过去的时间点。

setcookie("user", "", time()-3600);


也可以用以下的理解:


1.cookie是什么?

cookie指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。

通俗来理解就是,你去一个专卖店或者超市买东西,然后店里给你办一张会员卡,以后你的身份和购买信息都存在这个卡里,而这个卡放你身上。之后每次去买东西的时候只需要刷卡就可以了,不用再登记或者记录其他的信息。

然后将这段话映射了web上,超市结账台就是服务器端,而你自己就是客户端,你身上所带的卡也就是存在客户端中的cookie文件,里面记录了你的帐号密码等信息。

不过要注意的一点,cookie在第二次使用的时候才能够生效,也就是说你在超市第一次买东西,人家会给你办卡,你以后来买就可以刷卡了,但是第一次买之前,超市并没有你的任何信息,所以你第一次根本就没有卡。网站也一样,第一次登录某网站,当然要输入帐号密码等信息,然后才能生成cookie存在本地,以便下一次使用。

同时,cookie也有自己的有效期,过了期以后就失效了,本地的cookie文件会被自动删除。需要再次登录,输入帐号密码,然后生成新的cookie。这样做的主要目的还是为了安全考虑。

2.cookie机制图解。

PHP中的session与cookie理解

3.cookie使用方法。

(1)设置cookie

[php] view plain copy
  1. bool setcookie ( string $name,$value,$expire,$path,$domain,$secure,$httponly    
例如:

[php] view plain copy
  1. setcookie("username","user",0,"/");  
  2. setcookie("username","user",time()+60*60,"/");  

每个参数的用法就不作说明了。这里重点解析一下上面两中设置cookie方式中的时间和路径。

第一个当中的时间放了个0进去,难道代表生存时间为0.明显不可能,它有着特殊的意义,表示cookie的有效期随着浏览器的关闭而结束。他们的路径中都放了个"/"。这个就代表在这个域名下的所有contentpath都可以访问cookie,也就是说这个网站下的所有页面都可以追踪这个cookie。

(2)删除cookie

[php] view plain copy
  1. setcookie("username","",time()-3600,"/");  
和设置cookie一个东西,就是没有了cookie的值,时间比当前时间还早,然后不就过期了。

(3)查看cookie

[php] view plain copy
  1. print_r($_COOKIE);  
这家伙大家肯定都懂,就当浪费一下眼神。

----------------------------------------------------------------------------------

-----------------------------我是分割线-------------------------------------------

----------------------------------------------------------------------------------

1.session是什么?

Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间。

session的工作原理(摘于百度
(1)当一个session第一次被启用时,一个唯一的标识被存储于本地的cookie中。
(2)首先使用session_start()函数,PHP从session仓库中加载已经存储的session变量。
(3)当执行PHP脚本时,通过使用session_register()函数注册session变量。
(4)当PHP脚本执行结束时,未被销毁的session变量会被自动保存在本地一定路径下的session库中,这个路径可以通过php.ini文件中的session.save_path指定,下次浏览网页时可以加载使用。
其实通俗来讲的话,就是你去超市买东西,办的会员卡记录了你的信息,但是会员卡并不是保存在你这里,而是已数据的方式存在超市的系统中,一旦注册之后可以直接使用。你需要的时候,直接可以使用。但是你一旦离开超市,那个会员卡也就失去了效用直到你的下一次购买。同时,这个会员卡的唯一标识也就是你自己,其他任何人都没有办法使用你的会员卡。直接对号入座就很好理解了。
session和cookie的一大不同点就是,session注册之后直接使用,也就是第一次购买就可以使用,而cookie是经过第一次购买之后才将信息存入会员卡,然后第二次开始使用。

2.session机制图解。

PHP中的session与cookie理解

3.session使用方法。

(1)设置session

[php] view plain copy
  1. session_start();  

[php] view plain copy
  1. $_SESSION['username']="user";  

每一次在使用session之前都需要进行开启session,就当是通常进门都先需要开门一样。而在设置session时和对变量进行赋值没有多大的区别,其实$_SESSION本身就是一个变量。

(2)删除session

这个相对步骤就多了点,而不是cookie里面一句话搞定。

[php] view plain copy
  1. //开启session  
  2. session_start();  
  3.   
  4. //注销session  
  5. session_unset();  
  6.   
  7. //销毁session  
  8. session_destroy();  
  9.   
  10. //同时销毁本地cookie中的sessionid  
  11. setcookie(session_name(),"",time()-3600,"/");  
(3)查看session

[php] view plain copy
  1. print_r($_SESSION);  

1.cookie与session优缺点。

cookie本身是存放在客户端中,仅占用几kb的内存大小。每次登录网站的时候都会带上本地的cookie进行验证,省去了麻烦的重复输入。但是安全性不是很高,毕竟是存放在本地的文件,虽然都是进行加密了的,一旦电脑数据被盗取,cookie就很有可能会被获取。

session存放在服务器中,占中内存虽小,但是用户基数够大的情况下,会对服务器造成很大的负荷。但是,数据放在服务器上,总归风险降低了许多。虽说没有不透风的墙,不过风也是可以很小很小的,这比喻。。。有同学可能疑问,session使用时,会有sessionid存在本地,一旦获取能否登录。答案当然是否定的,因为每次的id都是不一样的。