PHP之cookie and session

2017-11-20

一、cookie是存储在浏览器客户端的一小片数据,cookie可以同时被前台和后台操作,即在前台页面可以获取,在后台php页面也可以获取,后面会介绍这两种方式的设置和获取cookie的方法。cookie可以跨页面存储,cookie不可以跨服务器访问,可以跨域访问。cookie是有生命期的,默认是浏览器进程相同,如果进程退出,cookie会被销毁,所以下面我们会说到如何给cookie设置过期时间。

  • 在前台获取和设置cookie的方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    //首先是设置一个cookie值并设置过期时间
    var current_date=new Date();
    current_date.setDate(current_date.getDate()+1);//设置过期时间为当前时间的第二天
    var expires_str=current_date.toGMTString();//转换时间格式为字符串
    document.cookie="user=zhou;path=/;expires="+expires+str;//path=/;属性指定cookie生效的路径,包含子目录
    //然后是获取cookie值
    console.log(document.cookie);
    //所以封装了setCookie()和getCookie方法
    function getCookie(key){
    var str=document.cookie;
    var len=key.length+1;
    var start=str.indexOf(key)+len;
    var end=str.indexOf(";",start)==-1?str.length:str.indexOf(";",start);
    var val=str.substring(start,end);
    return val;
    }
    function setCookie(key,value,path,expires){
    var current_date=new Date();
    current_date.setDate(current_date.getDate()+1);
    var expires_str=current_date.toGMTString();
    document.cookie=key+"="+value+";path="+path+";expires="+expires_str;
    }
  • 在后台设置和获取cookie值

    1
    2
    3
    4
    //先是设置cookie值,函数setcookie(key,value,path,expires)
    setcookie("user","zhou",time()+24*3600);//过期时间是时间戳,time()获得的是1970年至今的秒数
    //在后台获取cookie值也是通过一个数组$_COOKIE['user'],php将所有的cookie值存储在数组$_COOKIE
    echo $_COOKIE['user'];//即可获得cookie值

二、获取cookie因为cookie可以跨页面访问,但是cookie有很多缺点:

  • 1.数量:浏览器下的cookie数量不能超过300个,每个服务器不能超过20个,所有的cookie包含他们的属性所占的数据大小不能超过4k;
  • 2.cookie是不安全的,他可以被客户端更改,因此不要用cookie来存储重要或者敏感的数据;

    所以才有了PHPSESSID:

  • 1.session数据存储在session_id,该session_id通过cookie传送到前台,默认的session_id.
  • 2.前台只能看到session_id,而不能修改session值。
  • 3.使用session之前,需要先开启会话,即session_start();
  • 4.session存储比较安全,但是如果session数量过多,会导致服务器性能下降。
  • 5.session存储在$_SESSION数组里
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    session_start();
    $_SESSION['user']=$_POST['username'];//设置cookie值
    echo $_SESSION['user'];//获取cookie值
    //比如一个登陆成功跳转页面
    if(!empty($_SESSION['user'])){
    //header函数输出自定义http头文件
    //header("Location: url"); 指定当前页面跳转到url页面
    header("Location: index.html");
    }else{
    header("Location: login.html");
    }

三、密码加密算法

  • md5()
    1.可以将任意长度的字符串变成一个32位定长的字符串
    2.md5()只能单向加密,不能通过加密后的字符串重新解密为原字符串
    3.彩虹表,记录了大量的md5()结果,然后通过一定的算法,找到一个md5()结果相符的字符串echo md5($password);
  • sha1()
    echo sha1($password);它的结果是比md5()的字符串更长、复杂的字符串。