首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

session跟cookie的区别(转帖)

2012-12-19 
session和cookie的区别(转帖)??? secure:如果设为1,表示cookie只能被用户的浏览器认为是安全的服务器所

session和cookie的区别(转帖)

??? secure:如果设为"1",表示cookie只能被用户的浏览器认为是安全的服务器所记住。

??? 除了name之外所有的参数都是可选的。value,path,domain三个参数可以用空字符串""代换,表示没有设置;expire 和 secure两个参数是数值型的,可以用0表示。expire参数是一个标准的Unix时间标记,可以用time()或mktime()函数取得,以秒为单位。secure参数表示这个Cookie是否通过加密的HTTPS协议在网络上传输。

??? httponly:如果设为1,则表示cookie只能被http协议所使用,任何脚本语言,比如javascrīpt是不能获取PHP所创建的 cookie的,这就有效削弱了来自XSS的攻击。(注意了:这是PHP5才有的选项,咱也没有用过。看了官方手册尝试着翻译的,如有疑问,请参考官方手册。)

?? 当前设置的Cookie不是立即生效的,而是要等到下一个页面或刷新后才能看到.这是由于在设置的这个页面里Cookie由服务器传递给客户浏览器,在下一个页面或刷新后浏览器才能把Cookie从客户的机器里取出传回服务器的原因。

小道消息

16岁德国学生通过cookie破解Hotmail

??? 德国16岁学生Adriaan Graas对于网络安全以及Web开发很有兴趣,他还发现了Hotmail破解之道。在一周多之后的今天,微软还未修复该漏洞。

??? 这名小黑客的想法很简单,当用户登陆Hotmail时,系统将会生成一个cookie方便下次登陆。由于该cookie并未绑定IP,因此黑客可以假冒这些cookie并用于登陆,甚至不需要知道受害人的密码甚至email地址。通过XSS黑客可以插入一段javascrīpt代码,利用log scrīpt将cookie发送到某个web服务器,脚本可以通过PHP,ASP,CGI等语言编写。

Cookie应用案例:

●创建一个cookie:

SetCookie()

●创建cookie数组:

其一:

SetCookie("CookieArray[]", "Value 1");

SetCookie("CookieArray[]", "Value 2");

其二:

SetCookie("CookieArray[0]", "Value 1");

SetCookie("CookieArray[1]", "Value 2");

● 接收和处理Cookie

PHP对Cookie的接收和处理的支持非常好,是完全自动的,跟GET,POST变量的原则一样,特别简单。

比如设置一个名为MyCookier的Cookie,PHP会自动从WEB服务器接收的HTTP头里把它分析出来,并形成一个可直接使用的全局变量,名为$_COOKIE[‘MyCookie’],这个变量的值就是Cookie的值。数组同样适用。

分别举例如下:(假设这些都在以前的页面里设置过了,并且仍然有效)

echo $_COOKIE[‘MyCookie’];

取出cookie数组的例子:

<?php

// 创建一个cookie数组

setcookie("cookie[three]", "cookiethree");

setcookie("cookie[two]", "cookietwo");

setcookie("cookie[one]", "cookieone");

// 页面刷新之后,用foreach提取cookie数组。

if (isset($_COOKIE['cookie'])) {

foreach ($_COOKIE['cookie'] as $name => $value) {

?? echo "$name : $value <br />\n";

}

}

?>

就这么简单。

● 删除Cookie

??? 要删除一个已经存在的Cookie,有两个办法:

1、调用只带有name参数的SetCookie,那么名为这个name的Cookie将被从关系户机上删掉;

setcookie(“MyCookie”); //删除MyCookie。

2、设置Cookie的失效时间为time()或time()-1//time()减多少没有关系啦,只要是过期时间就行//,那么这个Cookie在这个页面的浏览完之后就被删除了(其实是失效了)。例如:

??? setcookie(“MyCookie”,”Value”,time()-1); //删除MyCookie。

要注意的是,当一个Cookie被删除时,它的值在当前页在仍然有效的。

??? 如果要把cookie保存为浏览器进程,即浏览器关闭后就失效。那么可以直接把expiretime设为0。例如:setcookie(“name”,”value”,0)。该参数不设置的话,关闭浏览器也能结束一个cookie。

Cookie注意事项

1、SetCookie()之前不能有任何html输出,它认了第二,没有哪个元素敢认第一,就是空格,空白行都不行。

2、SetCookie()后,你在当前页调用echo $_COOKIE["name"]不会有输出。必须刷新或到下一个页面才可以看到Cookie值。原因很简单。SetCookie()执行之后,往客户端发送一个cookie,你不刷新或浏览下一个页面,客户端怎么把cookie给你送回去呀?浏览器创建了一个Cookie后,对于每一个针对该网站的请求,都会在Header中带着这个Cookie;不过,对于其他网站的请求Cookie是绝对不会跟着发送的。而且浏览器会这样一直发送,直到 Cookie过期为止。

3、使用Cookie的限制。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。 (这是书上看到的说法,应该是一个web站点能创建的Cookie不能超过30个吧,要不然,我机子里的cookie少说也上百了,请达人指教!)

4、Cookie是保存在客户端的,用户禁用了Cookie,你的Cookie自然也就没作用啦!现在的浏览器,每当咱发送一个Cookie给客户端,他就像看门狗一样给拦截住了,并询问用户是否允许Cookie进门。天,用户又不是专家,有几个人知道啥叫Cookie呀?搞不好都当病毒拒之门外了。

热点排行