吐血推荐cookie和session

吐血推荐cookie和session

很多人对于cookie和session一知半解,今天我们就全面透彻的分析一下cookie和session的原理和使用以及注意事项。

*写在前面
我们的网页访问都是通过http协议实现,http是一个无状态协议,说白了就是一个用户请求一个页面后,再请求同一网站上的另外一个页面时,http协议并不认为两次请求是来自同一用户,也就是http协议没有一个内建机制来维护两个事务之间的状态。这种尴尬的局面应该如何逆转,没错,cookie和session就是专为此应用而生。

一、cookie

Cookie是用来将网站的资料信息记录在客户端(用户电脑中)的一种技术。下面就举个十分重要的例子,当我们访问一个网页时,通过服务器端认证后,服务器中的程序会把用户信息设置到我们电脑的CooKie中,注意了,当我们再次访问这个网站的其他脚本时,浏览器会自动携带Cookie中的数据一起访问,在服务器端的每一个脚本都可以接受Cookie中的数据,不需要每访问一个页面就得重新验证一次。 
接下来我们就开始从程序上详细解读Cookie。 
1、向客户端电脑中设置Cookie 
setcookie(name,value,expire,path,domain,secure); 
比如我们向客户端电脑中设置‘name’为‘郭润生’,‘email’为‘Rision666@163.com’,过期时间为3600秒(1个小时)程序如下:

<?php 
header('Content-type:text/html;charset=utf-8');
setcookie('name','郭润生',time()+3600);
setcookie('email','Rision666@163.com',time()+3600);

运行本程序后,我们就成功地向客户端电脑中设置了Cookie,而后当我们再次从同一没关闭的浏览器中访问该服务器上(网站)的脚本时,浏览器会自动携带该Coolie内容,所以我们再新建一个文件夹,然后直接读取由浏览器传过来的额Cookie值,这个Cookie值存到哪里了呢?没错,超级全局变量$_COOKIE中,访问Cookie值程序如下:

<?php
header('Content-type:text/html;charset=utf-8');
var_dump($_COOKIE);
?>

很显然,我们顺利地访问到了Cookie中的值。 
2、有时候我们想把同一个人的信息存储到一个变量中,即多维数组应用于cookie中,现在我们改写上面的程序

程序如下:

<?php 
header('Content-type:text/html;charset=utf-8');
var_dump(setcookie('member[name]','郭润生',time()+3600));
var_dump(setcookie('member[email]','Rision666@163.com',time()+3600));
?>

3、销毁Cookie 
有设置Cookie就有销毁Cookie,销毁Cookie语法如下: 
setcookie(“name”,”,time()-1);这里将cookie的过期时间设置为当前时间的前一秒,当然你可以设置为前N秒。 
程序运行结果如下:

<?php 
foreach ($_COOKIE['member'] as $key=>$val){
    var_dump(setcookie("member[{$key}]",'',time()-3600));
}
?>

注意:使用setcookie删除cookie的时候,需要与当初设置cookie的时候参数一致!(关于这个将在session中介绍)

二、session

Session技术与Cookie相似,都是用来存储使用者的相关资料,但是他们最大的不同是Cookie是将资料信息存储在客户端的电脑中,而session则是将数据存放于服务器上。把保存的资料比喻为健身房中的会员卡,Cookie技术相当于需要自己保存会员卡,会员卡中包含有自己所有的资料信息,每次去健身房时都需要持会员卡进健身房,而Session技术就相当于会员卡由健身房保存,每次来健身房的时候只需要报出会员卡卡号(我们暂称之为session_id,客户端的cookie中只需要保存session_id)即可,由此看来,session的实现需要cookie支持,关于禁用cookie实现session的策略我们以后介绍,接下来我们详细解读session。 
1、开启session 
session_start(); 
1)开启一个会话(一个健身爱好者去健身房健身 办会员卡) 
2)打开已经存在的会话(当客户以后再到健身房健身的时候,根据上次办理的卡号 验证该顾客是会员。即根据客户端传递过来的session_id把这个session_id对用的数据读到$_SESSION超级全局变量中)。

2、使用session存储数据 
向session中存数据,其语法就是想超级全局变量$_SESSION中压入数据,比如我们需要将上面Cookie中的数据压入到session中,语法如下

    <?php
    header('Content-type:text/html;charset=utf-8');
    session_start();
    $_SESSION['name']='郭润生';
    $_SESSION['email']='Rision666@163.com';

运行这个程序,我们干了两件事,第一为用户开启一个session并把数据压到session变量中,第二向客户端cookie中传递了一个session_id值。然后我们可以验证一下,是否有session和cookie,我们知道访问同一网站的不同脚本都会携带该cookie,所以我们可以在另一个页面中将该cookie打印出来,程序如下:

header('Content-type:text/html;charset=utf-8');
session_start();
var_dump($_SESSION);
var_dump($_COOKIE);
?>

经验证,我们得到了session中和cookie中的数据。 
3、注销变量与销毁session

<?php 
session_start();//打开要销毁的会话!
session_unset();//Free all session variables
session_destroy();//销毁一个会话中的全部数据
setcookie(session_name(),'',time()-3600,'/');//销毁保存在客户端的卡号(session id)
?>

这里解释一下{注意:使用setcookie删除cookie的时候,需要与当初设置cookie的时候参数一致!}我们在销毁session时,到session_destroy()后就可以了,这里我们就删除掉了服务器端的session文件,这个文件可以通过php.ini配置,默认在tmp文件夹下,我们看到该文件夹下文件的命名,没错就是session_id,也就是cookie传过来的值,或许前面有一个前缀sess_。接着说上面的,删除这个文件后,即使用户拿着session_id过来,我们也不认识它,cookie中的session_id在关闭浏览器后会自动销毁。 
有关于session和cookie的配置文件php.ini大家可以浏览一下。 
注意:同一用户,不同浏览器,服务器视为不同用户。

禁用Cookie后Session该如何传递

先提两个思路,第一是通过隐藏表单传递,第二是通过http协议的头部(URL重写)。

<form name="testform" action="/xxx"> 
<input type="hidden" name="sessionid"
value="ka5g95v4ekh92503nd9abg6553″> 
</form>

URL重写:

http://www.×××.com/test?sessionid=ka5g95v4ekh92503nd9abg6553 
具体详细教程以后有时间附上!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值