furhacker

不疯魔, 不成活

导航

cookie和session的区别

        cookie数据保存在客户端,session数据保存在服务器端;

        cookie保存的数据类型只能是字符串,session可以保存除了资源以外的数据类型;

        cookie的大小有4K限制,session没有限制;

        cookie可以被浏览器禁用,session则不能;

        cookie不够安全,可以被拷贝进行cookie欺骗,考虑到安全性,重要信息应使用session

        session在访问量增多时,会增加服务器的负担,从服务器性能方面考虑,非重要信息若需要保留应使用cookie

        cookie不设置有效期的话,默认是浏览器关闭即失效,session服务器默认有效期1440秒,24分钟

 

********************COOKIE**********************************************
setcookie ( " username " , " admin " , PHP_INT_MAX , "/include");
过期时间: 永久性 ( 计算机允许设定的最大整数 )
"/include"为有效路径, COOKIE 读取只能在include 目录下读取, 在"/include"外读取不了
setcookie ( " username " , $username , time()+3600 , "/include");
过期时间: 1小时 ( 3600 秒 )
setcookie ( " password " , " 123456 " , "/include");

<script type="text/javascript>
  window.alert ( document.cookie ) ;
</script>
JS方法获取COOKIE数据

setcookie ( " password " , " 123456 " , time()-1 );
setcookie ( "password" , false );
setcookie ( "password" ," " );
清除浏览器缓存
删除COOKIE数据

********************SESSION**********************************************
session_start( );
开启session
$_SESSION [ "username " ] = " admin " ;
设置session数据
echo $_SESSION [ "username " ];
读取session数据
unset( $_SESSION [ "username " ] );
$_SESSION = array( );//赋值一个空数组
删除session数据
session_destroy( ) ;
销毁,删除,当前session文件
echo session_name ( ) ;
获取当前的session名称
echo session_id ( ) ;
获取当前的session值
session_set_cookie_params()
使用session修改/设置cookie的相关参数
setcookie ( session_name( ) , false ) ;
删除session 对应的COOKIE 数据

垃圾回收的概率
session.gc_probability=1
设置概率的分子;
session.gc_divisor=1000
设置概率的分母;
session.gc_maxlifetime =1440; //以秒为单位,24分钟
SESSION垃圾回收时间

 

 

1、会话控制
在原生的php中提供了session和cookie的会话支持,在ThinkPHP中也提供对上述两种会话控制的支持。

1.1session支持
• session('name','value') 设置一个名为name的session,值是value
• $value = session('name') 获取一个名为name的session值
• session('name',null) 删除一个名为name的session
• session(null) 删除全部的session值
• session() 获取全部的session值(老版本是没有这个方法)
• session('?name') 判断指定的名为name的session是否存在

说明:session方法是ThinkPHP封装的方法(不是php内置的方法),在原生的php中使用session一定要session_start,并且前面不能有任何的输出,但是在ThinkPHP中session方法没有上述的要求。



1.2、cookie支持
• cookie('name','value') 设置一个名为name的cookie值是value
• cookie('name','value',3600) 同样也是设置,加了有效期(单位是S)
• $value = cookie('name') 获取一个名为name的cookie值
• cookie('name',null) 删除一个名为name的cookie值
• cookie(null) 删除全部的cookie(用不了)
• cookie() 获取全部的cookie

 

Cookie(null)这个方法存在bug,并不能将全部的cookie删除掉,需要修改底层代码,cookie方法定义在functions.php(Thinkphp/Common/)中

找到cookie方法修改的位置大概位于1377行和1379行这两处,需要各添加一个或运算条件【|| null == $name】。

特别说明:上述的几个使用方法中第五个(删除全部cookie的那个),有bug,需要修改底层代码之后才能使用,切记,切记,切记!!!

 

4、 setcookie(‘name’,‘value’,time()+3600);

        Var_dump($_COOKIE);

        为什么首次访问打印出来的是空?

        Cookie的默认有效域、默认有效时间、怎么销毁?和session的区别?

举例:

比如你第一次登录网站,http请求头信息没有cookie,你登陆后,服务器端设置了cookie用户名,就会将cookie存储在你的浏览器端。所以第一次请求时,var_dump($_COOKIE)是空的。当你再次登陆该网站发送请求的时候, http请求头信息携带cookie用户名一块发送给服务器。这时候cookie非空。

 

cookie默认只能在当前域名下有效。默认有效时间是浏览器关闭cookie即失效。

删除cookie的方法:

        设置cookie过期时间为当前时间的之前的任一时间time()-1

        setcookie(name,false) ,设置cookie的值为false

        setcookie(name,’’) ,设置cookie的值为空字符串

        手动清除浏览器缓存

posted on 2016-06-30 21:23  furhacker  阅读(379)  评论(0编辑  收藏  举报