PHP cookie session 及 ThinkPHP session 详解

  摘要:本文不再介绍cookie session的基本原理,主要介绍它们的代码操作规范 和 运行流程/机制。

  setcookie()函数有6个参数,这里我只列举最常用的前四个参数:

bool setcookie(string $name[,string $value[,int $expire[,string $path]]]);

参数说明:
$name
  类型:字符串
  说明:cookie的识别名字
$value
  类型:字符串
  说明:cookie的值
$expire
  类型:整形(时间戳)
  说明:cookie的生存期限,为UNIX时间戳,如果没有设定,该cookie在会话结束被删除
$path
  类型:字符串
  默认值:不设定或设定为空字符串,为设定cookie的当前目录
  说明:服务器端的指定路径,设定后,只有该目录及子目录的脚本可以存取此cookie

需要注意的问题:

  • cookie是HTTP标头的一部分,因此setcookie()函数要在其他信息被输出到浏览器之前调用;
  • $expire如果要设定,通常是这样 time()+5*60 ,即5分钟后失效;
  • $path通常可以设定为’/’,表示在整个服务器目录下的脚本都可以存取此cookie;

删除cookie

<?php
    //第一种方法,只设定cookie的名字
    //cookie值默认为空,则将该cookie的值置为空字符串,isset($_COOKIE['isLogin'])为true
    //生存时间默认为空,那么cookie会在浏览器关闭的时候被删除
    setcookie('isLogin');
    //第二种方法,设定过期时间为历史时间,那么cookie会被立即删除
    //isset($_COOKIE['isLogin'])为false
    setcookie('idLogin','',time()-1);
?>

二 . Session

  写在前面:可以看到cookie的配置项都在setcookie()函数里面指定,而session的配置是提前在PHP的配置文件里面进行配置,注册和销毁session的时候都不会涉及到过期时间、使用路径的问题。

2.1 配置session

  session的配置项都在PHP的配置文件php.ini中,重要的几个配置项如:session.name/session.use_cookies,因PHP运行环境不同,php.ini的位置也不同,这里不进行详述,网上有很多。
  而且通常这么都不同再配置了,使用默认值就蛮好的了
  我的运行环境是raspberry pi(基于debian的Raspbian版本),记住session文件的位置是/var/lib/php5/sess_*,需要root权限才可以查看session文件。

2.2 注册一个session变量

  代码太简单就不说了。
  但是注册一个session会话就不简单了,当给一个session变量赋值的时候发生了一下这些事情:

  1. session变量的变量名和值被保存在服务器端的session文件中;
  2. 这个session文件命名为sess_SESSIONID,这个SESSIONID是由32位16进制数字组成的字符串;
  3. 服务器的响应报头里面会有这一行Set-Cookie
    PHPSESSID=qielh3lr31aptftavsnj6qfms7; path=/
  4. 这样就在浏览器端注册了SESSION_ID,以后浏览器请求服务器端脚本都会带上这个SESSION_ID

2.3 注销session变量与销毁session

  销毁session的代码如下:

<?php
    //第一步:开启session
    session_start();
    //第二步:删除所有session变量,同时也会删除session文件里面的对应数据
    $_SESSION = array();
    //第三步:如果使用基于cookie的session,则删除浏览器端的cookie
    if(isset($_COOKIE[session_name()])){
        setcookie(session_name(),'',time()-1);
    }
    //第四步:彻底销毁session,其实这里是把session文件删除了
    session_destory();
?>

三 . ThinkPHP使用session

  访问ThinkPHP的应用,默认开启了session,所以cookie里面就已经有SESSION_ID了,服务器端也已经创建了session存储文件,只是文件是空的。
  ThinkPHP使用session()函数来简化session操作。
  具体用法可以见官方文档



<完>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值