cookie与session类似,掌握其中一个的用法,那么另外一个掌握起来也就不难。
首先说cookie吧
cookie由服务器创建,以文件形式保存在客户端的硬盘上。服务器与客户端交互的时候,就是依靠读取硬盘上的cookie,然后匹配后,判断是否为同一用户。
一、创建cookie
用setcookie(name,value,time,...),创建的cookie会保存在一个超全局数组($_COOKIE)当中.
<?php header("Content-type:text/html;charset=utf-8"); setcookie('name','beyond',time()+3600); setcookie('email','1355036599@qq.com',time()+3600); echo '<a href="test_2.php">点击查看cookie</a>'; var_dump($_COOKIE); ?>
输出:
array 'name' => string 'beyond' (length=6) 'email' => string '1355036599@qq.com' (length=17)
注意:cookie时间的单位是秒(s),time()+60,表示的是该cookie的有效时间时从创建到失效的时间是60秒。在创建cookie时千万不要忘记时间,不然设置的cookie会立即失效。
二、查看cookie
在其他页面或者本页面查看cookie时。查看cookie的整体属性的时,可如上例直接输出$_COOKIE;若要查看cookie的单个属性值时,比如name属性,则可用$_COOKIE['name'];输出的便是beyond,而不会输出email及其值。
三、删除cookie
常用的方法是:重新创建一个cookie或者说是重新赋值,但是新创建的cookie当中的属性名(name)都相同,只不过属性值(value)为空,时间time()为过去。
比如setcookie(‘name’,‘’,time()-3600);这就相当于删除cookie。
还有一种方法是用php的unset()函数,想要删除cookie的什么属性,就unset($_COOKIE['属性名'])。
再说session
和cookie正好相反,session由服务器创建,以文件形式保存在服务器端的硬盘上。服务器与客户端交互的时候,就是依靠读取硬盘上的session,然后匹配后,判断是否为同一用户。
一、创建session
在创建session之前,要先启动会话,用sesstion_start()函数。注意session_start()函数之前不要包含是任何文本输出。
然后家可以创建session了。session的创建与cookie有点不同,不像cookie用setcookie来创建,session直接用$_SESSION['name']=value来实现创建。创建session同样都保存在$_SESSION超全局数组中。
//test_1.php <?php header("Content-type:text/html;charset=utf-8"); session_start(); $_SESSION['name']='beyond'; $_SESSION['email']='1355036599@qq.com'; echo '<a href="test_2.php">点击查看session</a>'; var_dump($_SESSION); ?>
输出:
array 'name' => string 'beyond' (length=6) 'email' => string '1355036599@qq.com' (length=17)
二、查看session
//test_2.php <?php header('Content-type:text/html, charset=utf-8'); session_start();//若无此语句,则下一语句将会报错。 var_dump($_SESSION); ?>
和cookie几乎一样,都是用$_SESSION[]来访问,要访问name属性值,可用$_SESSION[name'];直接用$_SESSION是直接访问全部session。
注意:在设置属性的页面,因为已有session_start(),所以访问的时候可以不用再加session_start();但是在其他页面访问该页面的session时,必须要先使用session_start(),否则$_SESSION中将无任何数据,并弹出错误。
三、删除session
删除session可以用php的unset()函数,要删除什么内容直接删除即可,比如删除name==>unset($_SESSION['name'])。
也可以使用session_unset()函数,释放(删除)所有session。
另外一种方法是使用session_destroy()函数,此函数会删除所有session.
unset($_SESSION['name'])和session_destroy()都可以删除session,但是不会重置当前会话所关联的全局变量, 也不会重置会话 cookie,即在原页面依旧可以访问$_SESSION。 如果需要再次使用会话变量, 必须重新调用sesstion_start()函数。
以session_destroy()为例。
//test_3.php <?php header("Content-type:text/html;charset=utf-8"); session_start(); $_SESSION['name']='beyond'; $_SESSION['email']='1355036599@qq.com'; echo '<a href="test_4.php">点击</a>'; var_dump($_SESSION); //方法一 //unset($_SESSION['name']); //方法二 //session_unset(); //方法三 session_destroy(); var_dump($_SESSION); ?>
输出:
array 'name' => string 'beyond' (length=6) 'email' => string '1355036599@qq.com' (length=17) array 'name' => string 'beyod' (length=6) 'email' => string '1355036599@qq.com' (length=17)
注意:此时使用了session_destroy()函数删除session,而$_SESSION中依旧保存着原session的所有值。如果是在其他页面访问该页面的session时,就会显示空。比如下面的代码,和上面的test_3.php配合。
//test_4.php <?php header('Content-type:text/html, charset=utf-8'); session_start();//若无此语句,则下一语句将会报错。 var_dump($_SESSION); ?>
输出:
array empty
注意几个函数的区别。
拓展:
其实session与cookie是有一定的联系的,请看下一段代码
//test_5.php <?php header("Content-type:text/html;charset=utf-8"); session_start(); $_SESSION['name']='beyond'; $_SESSION['email']='1355036599@qq.com'; var_dump(session_name()); //用于获取当前会话名称 var_dump($_COOKIE); ?>
输出:
string 'PHPSESSID' (length=9) array 'PHPSESSID' => string 'mbncbb0qam7mtfug27sdq9e273' (length=26)
可见创建的session会在cookie当中生成一个PHPSESSID的字符串,那么也就是说,我们可以利用删除cookie的PHPSESSID(也就是session_name())来删除session。
如下段代码:
//test_6.php <?php header("Content-type:text/html;charset=utf-8"); session_start(); $_SESSION['name']='beyond'; $_SESSION['email']='1355036599@qq.com'; setcookie(session_name(),'',time()-3600,'/'); header('location:test_4.php'); ?>
test_4.php输出结果:
array empty
证明删除session成功。
注意的是:用setcookie删除session时,参数增加了一个'/',代表的是path(路径),'/'表示的是在localhost(127.0.0.1)整个目录。同样的,用这种方法,删除session后,在原页面依旧可以访问$_SESSION,且值不为空。在其他界面为空。