【二十五】cookie与session学习总结

一:cookie

1.创建cookie

关键字:setcookie 用于保存cookie

原理:当浏览器访问cookie.php页面时,我们的服务器就会以set-cookie的方式将cookie信息回送到http响应,当浏览器获取到信息后,会保存在本机

    //第一个参数:cookie(key).第二个参数:表示val.第三个参数表示cookie值
    setcookie("name","huahua",time()+3600);
    echo "成功";

2.查询cookie(获取客户端的cookie信息)

cookie信息是保存在$_COOKIE超全局数组中的

   // 超全局数组
    echo "<pre>";
    print_r($_COOKIE);
    echo "</pre>";
    //获取指定的键对应的值
    $name=$_COOKIE['name'];
    echo "$name";

3.更新cookie(重新设置cookie)

关键字:setcookie:参考创建cookie

4.删除cookie

    // 删除某个键值对
    setcookie("password","",time()-3600);
    // 删除所有键值对
    foreach ($_COOKIE as $key => $value) {
        setcookie("$key","$value",time()-3600);
    }

 实例:判断你是否第一次登陆

    if (!empty($_COOKIE['lastvisit'])){
        echo "您上次登陆的时间为".$_COOKIE['lastvisit'];
        setcookie('lastvisit',date("Y-m-d H:i:s"),time()+3600);
    }else{
        echo "您是第一次登陆";
        setcookie('lastvisit',date("Y-m-d H:i:s"),time()+3600);
    }

 二:session

1.添加session

<?php
    session_start();
    // 字符串
    $_SESSION["name"]="huahua";
    // 数字
    $_SESSION['aeg']=18;
    // 布尔值
    $_SESSION["isgirl"]=true;
    // 数组
    $arr1=array("hah","我们");
    $_SESSION["arr1"]=$arr1;
    // 对象
    class Dog{
        private $name;
        private $intro;
        function __construct($name,$intro){
            $this->name=$name;
            $this->intro=$intro;
        }
        public function getname(){
            return $this->name;
        }
    }
    $d=new Dog("xiaogou","i am good");
    $_SESSION["dog1"]=$d;
    echo "ook";
    // 使用超全局数组查看session
    echo "<pre>";
    print_r($_SESSION);
    echo "</pre>";
?>

2.获取cookie数据

<?php
    // 获取所有的session数据
    echo "获取session数据";
    // 需要开启session
    session_start();
    echo "<pre>";
    print_r($_SESSION);
    echo "</pre>";
    // 字符串
    echo "name=".$_SESSION["name"];
    echo "<br/>";
    // 数字
    echo "age=".$_SESSION["aeg"];
    echo "<br/>";
    // 数组
    foreach ($_SESSION["arr1"] as $key => $value) {
        echo "$key=$value<br/>";
    }
    // 取对象数据
    // 需要加载类的信息。因为是从session中取得数据,而session中并没有保存类的信息
    class Dog{
        private $name;
        private $intro;
        function __construct($name,$intro){
            $this->name=$name;
            $this->intro=$intro;
        }
        public function getname(){
            return $this->name;
        }
    }
    $xiaogou=$_SESSION["dog1"];
    echo $xiaogou->getname();
?>

3.更新session数据

<?php
    session_start();
    $_SESSION["name"]="hei";
    $_SESSION["aeg"]=99;
    echo "更新成功";
        echo "<pre>";
    print_r($_SESSION);
    echo "</pre>";
?>

4.删除session数据

<?php
    session_start();
    // 删除指定键值对
    unset($_SESSION['name']);
    // 删除所有的session信息
    session_destroy();
?>

 购物大厅例题:

buy.php

<?php
    echo "<h1>购物大厅</h1>";
    if (isset($_GET['PHPSESSID'])) {
        session_id($_GET['PHPSESSID']);
        // 重置该页面的ssesion_id
    }
    session_start();
    $sid=session_id();
    // echo SID;    SID的输出为PHPSESSID=mpsav4071jlu8iue98tiujdp91
    echo "<a href='shoppre.php?bookid=sn001&bookname=天龙八部&PHPSESSID=$sid'>天龙八部</a><br/>";
    echo "<a href='shoppre.php?bookid=sn002&bookname=聊斋&PHPSESSID=$sid'>聊斋</a><br/>";
    echo "<a href='shoppre.php?bookid=sn003&bookname=红楼梦&PHPSESSID=$sid'>红楼梦</a><br/>";
    echo "<a href='shoppre.php?bookid=sn004&bookname=西游记&PHPSESSID=$sid'>西游记</a><br/>";
    echo "<a href='buylist.php?PHPSESSID=$sid'>查看您购买的商品列表</a>";
?>

showpre.php

 1 <?php
 2     if (isset($_GET['PHPSESSID'])) {
 3         session_id($_GET['PHPSESSID']);
 4     }
 5     //注意:sid的设置在session_start之前还是之后
 6     $sid=session_id();
 7     session_start();
 8     // 接收书号和书名
 9     $bookid=$_GET['bookid'];
10     $bookname=$_GET['bookname'];
11 
12     $_SESSION["$bookid"]="$bookname";
13     echo "购买商品成功";
14     echo "<a href=buy.php?PHPSESSID=$sid>返回购物大厅</a>";
15 ?>

buglist.php

 1 <?php
 2     if (isset($_GET['PHPSESSID'])) {
 3         session_id($_GET['PHPSESSID']);
 4     }
 5     session_start();
 6     echo "购物车商品有:<br/>";
 7     foreach ($_SESSION as $key => $value) {
 8         echo "书号是$key,书名是$value<br/>";
 9     }
10 ?>

界面显示:

 

 

问题:当用户禁用cookie后,怎样使用session技术共享多个页面呢?(重写url)

  1. 在每个超链接上添加一个 PHPSESSID=session id。同时每个页面判断是是否有已生成的session id 。看上例子
  2. 使用常量SID。
  3. 设置php.ini下的session.use_trans_sid = 1

 

posted @ 2017-12-22 09:40  花花妹子。  阅读(221)  评论(0编辑  收藏  举报