SESSIONCOOKIE完美解决了http web协议无状态的问题,从而实现数据在不同页面之间的传递(例如通过session存数的数据来判断用户的访问权限)和数据在客户端的持久存储(例如通过cookie存储论坛的用户登录信息,实现下次在本机登陆时不需要输入用户名和密码,可以直接登录)。


当登录网站时启动SESSION会话,会在服务器端随机生成一个SESSION_ID,这个SESSION_ID在本次登录结束之前一直有效,当关闭页面或执行注销操作之后,这个SESSION_ID会在服务器端自动注销。重新登录此页面时候,会重新生成另一个随机且唯一的SESSION_ID.


一、SESSION的使用


1、启动会话


Bool session_start(void)


注意:在这之前不能有任何输出,该函数的参数为空。


2.注册会话


<?php


session_start();//声明启动session


$_SESSION[user]=null;


//声明一个user的变量,并赋给空置


?>


3、使用会话


index.php内容:


<?php


session_start();//启动SESSION


$_SESSION[user]="明日科技";//SESSION变量赋值


include("main.php");


?>


main.php



main.php内容:


<?php


if ($_SESSION['user']=="明日科技"){//判断用于存储用户名的Session会话变量是否为空


?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">


<head>


<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />


<title>通过SESSION变量判断页面的访问权限</title>


</head>



<body>


<?php


echo $_SESSION['user']."欢迎您!";


?>


</body>


</html>


<?php


}else{


echo "您没有访问此页面的权限!";


}



?>


在本例中如果访问index.php,则成功输出“明日科技欢迎您!”,如果直接在地址栏中访问main.php则会访问失败。这是因为在index.php中定义了session变量,并在main.php中判断SESSION的值。


4、删除会话


删除单个会话、删除多个会话、结束当前会话。


unset$_SESSION[user])删除session数组中指定的元素;unset$_SESSION),一次注销整个数组,禁止整个会话功能,并且没有办法将其恢复,用户也不能再次注册$_SESSION变量,所以,用户要是删除多个或全部会话,可以采用下面的两种方式;如果一次要删除所有的会话变量,可以将一个空的数组赋值给$_SESSION,代码如下:$_SESSION=array();如果整个会话已经结束,可以使用session_destroy()函数结束当前的会话,session_destroy().


二、SESSION的生命周期


session_set_cookie_params()


setcookie()


例子:


index.php


?php


$time = 1 * 60;// 设置session失效时间


session_set_cookie_params($time);// 使用函数


session_start();// 初始化session


$_SESSION['username'] = '明日科技';//SESSION变量赋值


?>


<!--创建超链接,实现SESSION变量在不同页面之间的传递-->


<a href="main.php">查看SESSION是否失效</a>


mai.php:


<?php


session_start();//初始化SESSION变量


echo $_SESSION['username'];//获取SESSION变量的值


?>



session_set_cookie_params()必须在session_start函数之前使用,并且在不同的浏览器之间还会导致一些不同的问题,所以不推荐使用。


phpsetcookie()函数主要用于创建cookie,但是该函数同样可以用于控制session的生命周期。


index.php:


<?php


session_start();//初始化SESSION变量


$time = 1 * 60;// 设置session失效时间


setcookie(session_name(),session_id(),time()+$time,"/");// 使用setcookie手动设置session失效时间


$_SESSION['username'] = "明日科技";//定义SESSION变量的值


?>


<!--创建超链接,实现SESSION变量在不同页面之间的传递-->


<a href="main.php">查看SESSION是否失效</a>


mai.php:


?php


session_start();//初始化SESSION变量


echo $_SESSION['username'];//获取SESSION变量的值


?



上面所讲的是在客户端支持cookie的前提下控制session的生命周期。


一旦客户端禁止cookie呢,session变量就不能再页面之间进行传递。解决的办法有四个:在登录之前告之用户必须打开cookie;修改配置文件php.inisession.use_trans_sid=1或者编译的时候打开-enable-trans-sid选项,让pph自动夸页面传递session_id;getpost方式,通过表单元素传递;通过文件或者数据库传递。


上面的第二种方法不常用,其他三种还可以。下面get方式的实例:


Index.php:


<?php


session_start();


?>


<a href="index_ok.php?s_id=<?php echo session_id(); ?>">通过GET方式传递session数据</a>


Index_ok.php:


<?php


session_start();//初始化SESSION变量


echo "本页创建的SESSION_ID".session_id();//获取当前页面的SESSION_ID


echo "<br>";


echo "获取上一页传递的SESSION_ID".$_GET['s_id'];//获取上一页传递的ID



?>



上面实例的结果,当客户端支持cookie时候,得到的两个页面的session_id相同,不知此cookie的时候,得到的两个session_id不同。



二、cookie


创建cookie


<?php


setcookie("mr",'明日科技');


setcookie("mr", '明日科技', time()+60); //设置Cookie有效时间为60


//设置有效时间为60秒,有效目录为“/10.9/”,有效域名为“mrbccd.cn”及其所有子域名


setcookie("mr", "明日科技", time()+3600, "/10.9/",". mrbccd.cn", 1);


echo "读取COOKIE".$_COOKIE['mr'];//通过$_COOKIE[]读取COOKIE的值


?>


首次运行本实例的时候得不到cookie的值,但是刷新以后可以得到。


读取cookie变量


通过超全局$_COOKIE[]来读取cookie的值。


删除cookie


如果cookie没有设置过期时间那么cookie会在浏览器关闭时自动删除,如果设置了过期时间,那么浏览器会保存cookie数据,即使重新启动计算机,只要没有过期,COOKIE数数据就一直有效。