cookie和session都可以暂时保存多个页面中使用的变量,但是它们有本质的差别:cookie存放在客户端浏览器中;
session保存在服务器上; 它们之间的联系是session ID 一般保存在cookie中,或者放在URL上。
当客户端禁用cookie时(点击IE中的“工具”—“Internet选项”,在弹出的对话框里点击“安全”—“自定义级别”项,将“允许每个对话COOKIE”设为禁用),session_id将无法传递,此时session失效。不过php5在linux/unix平台可以自动检查cookie状态,如果客户端设置了禁用,则系统自动把session_id附加到url上传递。windows主机则无此功能
session保存在服务器上; 它们之间的联系是session ID 一般保存在cookie中,或者放在URL上。
当客户端禁用cookie时(点击IE中的“工具”—“Internet选项”,在弹出的对话框里点击“安全”—“自定义级别”项,将“允许每个对话COOKIE”设为禁用),session_id将无法传递,此时session失效。不过php5在linux/unix平台可以自动检查cookie状态,如果客户端设置了禁用,则系统自动把session_id附加到url上传递。windows主机则无此功能
session存储于服务器端,根据提供的id来得到用户的文件,取得变量的值,session id可以通过客户端的cookie或者访问的url的附加数据传送给服务器,然后服务器来读取session的目录。也就是说session id是取得存储在服务器上session变量的身份证。一般情况下cookie能解决的session都能解决。session用的比较广泛。cookie用于实现用户登录比较多!
刚刚发现的,这个blog里说的还是蛮详细好懂的,你可以去看下
是,对于Session及Cookie来说最大的区别在此,以下就是我所根据代码及相关理解所整理的。
代码:
A1.php
<?php
function CookiesTest($newValue){
if(!isset($_COOKIE["CookiesTest"])){
setcookie('CookiesTest',$newValue,time() + 3600);
echo "CookieValue:".$_COOKIE["CookieValue"];
}
}
function SessionTest($newValue){
if(!session_is_registered('SessionTest')){
session_register("SessionTest");
}
}
CookiesTest("HelloCookies!");
SessionTest("HelloSession!");
echo "CookieValue:".print_r($_COOKIE)."<br>";
echo "CookieValue:".$_COOKIE["CookiesTest"]."<br>";
$SessionTest = "dd";
echo $SessionTest;
echo $_SESSION["SessionTest"];
?> A2.php <?php
//session_start();
echo $_SESSION["SessionTest"];
echo $CookiesTest;
?>
Cookie:
(1)用来存储连续访问一个页面时所使用。(即,对地Cookie的值不是真正意义上的全局变更的概念,即,对于A1.php来说通过调整$_COOKIE[“XX”]可以调用相应的Cookie值,但是如果再打开一个A2.php的IE游览器,再取该Cookie值时就取不出来了!因此对于Cookie来说并不是实际意义上的全局概念。)
(2)Cookie是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。 Session:(一种特殊的Cookie,当Cookie被禁时Session也会被禁,但是对于Session可以通过重定向的方式重新获得)
(1)可以用来存储用户全局的唯一变量。对于Session来说可以通过Session_start()重新定向并获得Session的值并进行操作且并不分浏览是否被重复打开。如上面的A1.php进行了Session的操作,如果再打开一个IE后使用Sessoin_start();后Session相应的变量又会被重新启用,即实现了真正意义的全局及唯一。
(2)对于Session来说是存储在服务器上的php指定的目录中的(session_dir)的位置进行的存放。
session在服务器端存储,安全性应该不成问题,但占用了系统资源
cookie在客户端存储,安全性较差,有被篡改欺骗的可能,可通过blowfish或xxtea等算法加密来弥补