吐血推荐cookie和session
2017-03-06 11:20
253 查看
吐血推荐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
具体详细教程以后有时间附上!
相关文章推荐
- 浏览器在不开启Cookie下Session处理小结 推荐
- Cookie、Session,以及在ASP.NET中的应用 推荐
- PHP中session和cookie的区别 推荐
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- 【荐】PHP Session和Cookie,Session阻塞,Session垃圾回收,Redis共享Session,不推荐Memcached保存Session
- 会话技术Cookie&Session
- Cookie与Session 的区别
- session 与cookie 的异同
- IE的cookie机制导致的session问题及解决办法
- cookie&session
- php交互篇(二)session 与 cookie
- 循序渐进Python3(十三) --6-- cookie和session
- php的cookie和session
- cookie、session及实现记住密码,自动登录
- 在webservice中使用session和cookie
- 使用HttpWebRequest提交ASP.NET表单并保持Session和Cookie
- cookie和session
- java springMVC session与cookie
- (转)由Uploadify插件想到的Flash无法传递Session和Cookie的问题解决
- cookie与session的区别