深入理解PHP中的Session和Cookie
发布时间:2020-12-13 06:25:30 所属栏目:PHP教程 来源:网络整理
导读:在一个页面设置一个cookie时,必须刷新或到下一个页面才可以用 $_COOKIE 得到变量的值. 原因是因为当页面第一次被浏览器访问载入时,页面中的 cookie 会被设置,将其发送存储到客户端指定的存储位置,所以$_COOKIE没有接收到客户端发送过来的 cookie 变量的值,当
在一个页面设置一个cookie时,必须刷新或到下一个页面才可以用 $_COOKIE 得到变量的值. 本人表达能力不强,如有不明,还请抱歉!<FONT style="COLOR: #ff0000">php中设置cookie数组的时候,不可以用像php中的那个添加数据的方法:<div class="codetitle"><a style="CURSOR: pointer" data="6187" class="copybut" id="copybut6187" onclick="doCopy('code6187')"> 代码如下:<div class="codebody" id="code6187"><?php setcookie('my_cookie[]',1); setcookie('my_cookie[]',2); print_r($_COOKIE); // Array ( [my_cookie] => Array ( [0] => 1 )) // 数组的值添加是添加成功了,不过索引没有变,后面的数据将前的数据覆盖了! 由此得到 my_cookie[],默认指向数据的第一元素的位置,即索引为 0 的位置. 注意与php中的不一样! 以后用cookie数据记住要指定数组元素索引哦!$my_cookie[] = 1; $my_cookie[] = 2; print_r($my_cookie); //Array ( [0] => 1 [1] => 2) ?> 删除 cookie 变量的两个方法:1.php<div class="codetitle"><a style="CURSOR: pointer" data="97901" class="copybut" id="copybut97901" onclick="doCopy('code97901')"> 代码如下:<div class="codebody" id="code97901"> <?php setcookie('user_name_1','zhaofei299',time()+3600); // 生存期为 1 个小时 setcookie('user_name_2','ZHAOFEI299',time()+3600); // 生存期为 1 个小时 ?> 2.php <div class="codetitle"><a style="CURSOR: pointer" data="75874" class="copybut" id="copybut75874" onclick="doCopy('code75874')"> 代码如下:<div class="codebody" id="code75874"> <?php setcookie('user_name_1'); // 第一种 setcookie('user_name_2',"",time()-1); // 第二种 print_r($_COOKIE); // 刷新页面2下以上会输出 Array ( [user_name_1] => )/为什么超级全局变量 $_COOKIE 中的 user_name_1 没有被删除(变量为空并不代表不存在),而 user_name_2被删除了? 那是因为两个删除变量的方式不同! 第一种: 是设置了 cookie 的生存期,只不过是将它的值默认设置为空,生存期为与浏览器一样,浏览器 关闭时,cookie才会删除!所以当重新打开一个浏览器,输出地址时,才会发现 cookie 变量全部被删除了! 将2.php 中两个 setcookie() 函数部分注释掉看看(重新输出了地址)! 第二种: 也是设置了 cookie 的生存期,是使 cookie 的生存期一定过期,cookie 也就被删除,所以刷 新页面,客户端向服务器端发送 cookie 时,$_COOKIE 并没有能够得到该cookie变量的值! / ?> 会话id默认储放在客户端Cookie中! <div class="codetitle"><a style="CURSOR: pointer" data="15395" class="copybut" id="copybut15395" onclick="doCopy('code15395')"> 代码如下:<div class="codebody" id="code15395"> <?php session_start(); print_r($_COOKIE); ?> <FONT style="COLOR: #000000">cookie的设置有两种方法<FONT style="COLOR: #ff0000">header('set-cookie:user=zhaofei299');setcookie('user','zhaofei299'); 会话变量不能被GET数据或POST数据重载! 使用session变量传递数组,对象时无需序列化! 使用session变量传递对象时,在调用session_start()之前,必须包含该对类对象的定义,反序列化 (serialize)也是如此! 删除单个会话变量可以使用unset($_SESSION['***']) 直接删除! 删除所有的会话变量不可以用unset($_SESSION),因为这样会将所有的会话信息删除,包含存储在COOKIE 中的PHPSESSID,也就是破坏了两个页面之间的会话联系,应该使用$_SESSION = array(); 消除会话id,使页面之间失去联系! session_destroy(); 程序清单1.1 <div class="codetitle"><a style="CURSOR: pointer" data="96832" class="copybut" id="copybut96832" onclick="doCopy('code96832')"> 代码如下:<div class="codebody" id="code96832"> <?php session_start(); header('content-type:text/html;charset=utf-8'); $_SESSION['a'] = 'a'; $_SESSION['b'] = 'b'; unset($_SESSION); //测试后,再注释下看看 $_SESSION['user'] = 'zhaofei299'; echo 'SESSION_ID: '.session_id().' '; echo '<a href="3.php" target="_blank">测试下'; ?> <div class="codetitle"><a style="CURSOR: pointer" data="79079" class="copybut" id="copybut79079" onclick="doCopy('code79079')"> 代码如下:<div class="codebody" id="code79079"> <?php session_start(); echo $_SESSION['user']; echo session_id(); //会话变量改变了 ?> <FONT style="COLOR: #ff0000">会话id(session_id)的两种方式传递:因为默认session是基于cookie的,而cookie又是跟随http协议发送的,所以与cookie一样,在 |