cookie和session其实就是保存用户信息,在他们访问一个网站时,服务器端能知道这是一个合法注册用户。
cookie的话,就是将用户信息保存在用户的客户端,session机制就是将信息保存在服务器端。
(一)cookie
下面直接进入php的例子吧,:
<?php
//file cookie.php
setcookie('user[username]', 'jack');
setcookie('user[pass]', sha1('jack'));
?>
当我们在浏览器里请求cookie.php这个文件的时候,看HTTP的响应头(Response Headers)中的Set-Cookie:
在服务器端的php脚本中将用户信息以键值对的形式通过HTTP响应头发送给客户端。这样用户每次请求这个网站的页面时,在HTTP的请求头中(Request Headers)的Cookie都会带上用户的信息,这样请求到服务器那边,服务器就知道这是哪个用户了。
将上面设置的cookie信息输出:
<?php
//file test-cookie.php
foreach ($_COOKIE['user'] as $key => $value)
{
echo $key, ':', $value . '<br />';
}
?>
注意 Requeset Headers中的Cookie, 每一次请求都会带上设置好的用户信息。
通过下面的代码删除cookie。
<?php
//file delete-cookie.php
setcookie('user[username]', '', time()-1<span style="font-family:Microsoft YaHei;">, '/'</span>);
setcookie('user[pass]', '', time()-1, '/');
(二)session
session的描述就好比如你在一个商城,办了一张会员卡,美丽的前台将你的信息刷刷敲进了电脑,然后给你一张会员卡,说:“你可以把这张卡的卡号给记在手机上,如果忘带卡了,只要将你的卡号告诉我们,我们也可以给你优惠”。那台电脑就相当于我们的服务器,卡号就是Session ID。这个Session ID通常保存在客户端的cookie中,如果用户禁用了cookie,那就只能通过url手动将Session ID进行传送了。我在php.ini中设置session的保存位置为:session.save_path = "/home/jack/session"
<?php
session_start(); //file session.php
/*
session_start()主要有两个作用
1、当用户第一次访问网站时,会创建一个唯一的Session ID,通过HTTP响应头将Session ID 保存到客户端。同时在服务器端生成一个Session ID命名的
文件(开始会话);
2、当用户第二次访问网站时,HTTP的请求头中会带上这个Session ID, 这时的session_start()就会去服务器的硬盘中寻找和Session ID同名的文件,将
保存的回话信息读出来(返回存在的回话)
*/
$_SESSION['name'] = 'jack';
$_SESSION['uid'] = 10011;
?>
当我请求服务器时,HTTP的Response Headers中的Set-Cookie 将Session ID保存到客户端,在我的服务器端也生成了一个文件:
这是里面的内容:
name|s:4:"jack";uid|i:10011;
看上图,当我们请求这个网站的一个网页时,在Request Headers中的Cookie中都会携带上Session ID到服务器端请求资源。这样客户端在服务器端只要通过一个Session ID就可以进行交流,相对比较安全。
清除session信息:
<?php
//file delete-session.php
session_start();
$_SESSION = array(); //清空$_SESSION的同时,服务器端对应的session文件内容也会被清空
if (isset($_COOKIE[session_name()]))
{
setcookie(session_name(), '', time()-100, '/');
}
session_destroy(); //会删除对应的服务器端session文件
?>