zoukankan      html  css  js  c++  java
  • 【二十五】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
  • 相关阅读:
    Java最大栈深度有多大?-从一道面试题开始学习JVM
    高性能队列——Disruptor
    高性能的Redis之对象底层实现原理详解
    高性能的Redis之数据持久化小结
    高性能的Redis之数据结构小结
    Redis单线程为什么如此之快?
    kafka partition与 group的特性
    深扒Disruptor高性能的原因
    Python 元类编程实现一个简单的 ORM
    用vue.js实现的期货,股票的实时K线
  • 原文地址:https://www.cnblogs.com/8013-cmf/p/8079789.html
Copyright © 2011-2022 走看看