zoukankan      html  css  js  c++  java
  • PHP......会话控制SESSION与COOKIE

    一、SESSION

    Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。

    在计算机专业术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间。以及如果需要的话,可能还有一定的操作空间。

    具体到Web中的Session指的就是用户在浏览某个网站时,从进入网站到关闭这个网站所经过的这段时间,也就是用户浏览这个网站所花费的时间。因此从上述的定义中我们可以看到,Session实际上是一个特定的时间概念。
    需要注意的是,一个Session的概念需要包括特定的客户端,特定的服务器端以及不中断的操作时间。A用户和C服务器建立连接时所处的Session同B用户和C服务器建立连接时所处的Session是两个不同的Session。
    特点:
    1.存储在服务端的
    2.每个人存一份
    3.可以存储任意类型数据
    4.默认过期时间15分钟
    5.比较安全,但会加大服务端压力
    用法:
    要使用session,无论是读取还是写入,都必须开启session。开启session使用session_start();而且必须写在php代码最顶端,中间不能有别的代码,否则会报错。
    <?php
    session_start();  //开启session
    $_SESSION["uid"] = "zhangsan"; //写入session
    echo $_SESSION["uid"];//获取
    ?>
    例1:在第一个页面存入session,在第二个页面获取session
    第一个页面:
    <?php
    session_start();  //开启session
    $_SESSION["uid"] = "zhangsan"; //写入session
    echo $_SESSION["uid"];//获取
    ?>
    <a href="test.php">跳转</a>

    第二个页面:

    <?php
    session_start();
    echo $_SESSION["uid"];
    ?>

    注意:在一个页面存入session,即使关闭该页面,其他页面也能获取到session,只要浏览器不关就行,一旦关闭浏览器,session就不存在了。

    例2:登录时成功则跳转到主页面,若不登录,直接输入网址到主页面则会跳转到登录页面,这样就必须登录才能看到主页面,增加了安全性。
    登录页面:
    <h1>登录</h1>
    <form action="loginchuli.php" method="post">
    <div>用户名:<input type="text" name="uid" /></div><br />
    <div>密码: &nbsp;<input type="password" name="pwd" /></div><br />
    <div><input type="submit" value="登录" /></div>
    </form>

    登录处理页面:

    <?php
    session_start();
    include("../DB.class.php");
    $db = new DB();
    $uid =$_POST["uid"];
    $pwd = $_POST["pwd"];
    $sql = "select count(*) from Users where Uid= '{$uid}' and Pwd = '{$pwd}'";
    $r= $db->StrQuery($sql,0,"weixin");
    if($r==1)
    {
        $_SESSION["uid"] = $uid;
        header("location:main.php");    
    }
    else
    {
        header("location:login.php");    
    }

    主页面:

    <?php
    session_start();
    //必须登录才能访问当前页面,若不加判断,可以通过输入URL地址进入当前页面,所以涉及登录时必须加判断
    if(empty($_SESSION["uid"]))
    {
        header("location:login.php");
            
    }
    echo $_SESSION["uid"];
    ?>

    例3:加入购物车,控制购买数量

    水果展示页面:

    <body>
    <h1>水果列表</h1>
    <table width="800" border="1" cellpadding="0" cellspacing="0">
    <tr>
    <td>水果名称</td>
    <td>水果价格</td>
    <td>水果产地</td>
    <td>水果库存</td>
    <td>操作</td>
    </tr>
    <?php
    session_start();
    include("../DB.class.php");
    $db = new DB();
    $sql = "select * from Fruit";
    $attr = $db->Query($sql);
    foreach($attr as $v)
    {
        echo "<tr><td>{$v[1]}</td>
            <td>{$v[2]}</td>
            <td>{$v[3]}</td>
            <td>{$v[4]}</td>
            <td><a href='addgwc.php?code={$v[0]}' >加入购物车</a></td></tr>";    //GET方法传主键值
    }
    ?>
    </table>
    <a href="gouwuche.php" >查看购物车</a>

    加入购物车处理页面:

    <?php
    session_start();
    $code =$_GET["code"];
    //如果第一次点击
    if(empty($_SESSION["sg"]))
    {
        //第一次点击需要造一个二维数组,存入session
        $attr = array(array($code,1)); //$code为主键值,1代表数量
        $_SESSION["sg"] = $attr;
    }
    else 
    {
        //第n次点击,n!=1
        $attr= $_SESSION["sg"];
        //判断该水果是否已经存在
        if(iscunzai($code)) //如果存在,数量加1
        {
            foreach($attr as $k=>$v)
            {
                if($v[0]==$code) //找到该主键值,数量加1
                {
                    //改$v[1]不行,因为$v是赋值后的变量,它的变化与原数组$attr无关,所以必须用原数组去变化
                    $attr[$k][1]= $v[1]+1;                
                }    
            }
            $_SESSION["sg"]= $attr;    
        }
        else  //若不存在,追加一个数组,存入session
        {
            $arr = array($code,1);
            array_push($attr,$arr);
            
            $_SESSION["sg"] = $attr;
        }        
    }
    //判断该水果是否已经存在的方法
    function iscunzai($c)   //传入一个参数
    {
        $attr = $_SESSION["sg"];  //获取session中的数据
        $b = false;    
        foreach($attr as $v)
        {
            $b= $b || in_array($c,$v);    //$c是否在数组$v里面,返回true or false  
        }
        return $b;   //若存在,返回true,若不存在,返回false
    }
    header("location:showlist.php");

    购物车页面:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    <style type="text/css">
    .sc{ 100px; background-color:#03F; color:#FFF; text-align:center;}
    .sc:hover{ cursor:pointer; background-color:#F90; color:#FFF;}
    .aa{ font-size:x-large; color:#F00;}
    input:hover{ cursor:pointer;}
    </style>
    </head>
    
    <body>
    <h1>购物车</h1> <table width="100%" border="1" cellpadding="0" cellspacing="0"> <tr> <td>水果名称</td> <td>水果价格</td> <td>数量</td> <td>操作</td> </tr> <?php session_start(); if(!empty($_SESSION["sg"])) { include("../DB.class.php"); $db = new DB(); $attr = $_SESSION["sg"]; foreach($attr as $v) { $sql = "select Name,Price from fruit where Ids = '{$v[0]}'"; $arr = $db->Query($sql); echo "<tr> <td>{$arr[0][0]}</td> <td>{$arr[0][1]}</td> <td>{$v[1]}</td> <td><a href='deletegwc.php?code={$v[0]}'>删除</a></td> </tr>"; } } ?> </table><br /> <a href='showlist.php'><input type='button' value='返回' /></a>&nbsp; <a href='dingdan.php'><input type='button' value='提交订单' id='tj' /></a>

    删除处理页面:

    <?php
    session_start();
    $code = $_GET["code"];//获取主键值
    $attr = $_SESSION["sg"];//获取session中的数据存入$attr  //$attr为二维数组
    foreach($attr as $k=>$v)//循环遍历二维数组
    {
        if($v[0]==$code )  //找到与传过来的主键值相等的主键值    
        {
            //判断水果数量是否为1
            if($v[1]>1)
            {
                $attr[$k][1] = $v[1]-1;    
            }
            else //数量等于1
            {
                unset($attr[$k]);
            }
        }    
    }
    $_SESSION["sg"] = $attr;  //将删除操作完成后的二维数组存入session
    header("location:gouwuche.php");

    二、COOKIE

    “Cookie”是小量信息,由网络服务器发 送出来以存储在网络浏览器上,从而下次这位独一无二的访客又回到该网络服务器时,可从该浏览器读回此信息。这是很有用的,让浏览器记住这位访客的特定信 息,如上次访问的位置、花费的时间或用户首选项(如样式表)。Cookie 是个存储在浏览器目录的文本文件,当浏览器运行时,存储在 RAM 中。一旦你从该网站或网络服务器退出,Cookie 也可存储在计算机的硬驱上。当访客结束其浏览器对话时,即终止的所有 Cookie。

    特点:

    1.存储在客户端的

    2.每个人存一份

    3.只能存储字符串

    4.默认永不过期的,除非清除掉

    5.安全性较低

    用法:

    setcookie("uid","zhangsan");//设置cookie

    echo $_COOKIE["uid"];//获取cookie,若是在本页面取值,第一次会报错。

    例子:

    <?php
    setcookie("uid","zhangsan");  //设置cookie
    echo $_COOKIE["uid"];         //若本页面取值,第一次会报错
    ?>
    <a href="main.php">跳转</a>

    跳转页面:

    <?php
    echo $_COOKIE["uid"];
    ?>

    注意:设置cookie后,在其他页面也可以取到cookie的值:"zhangsan"。

     
  • 相关阅读:
    Unity3D_08_XML文件创建,读取,修改,添加
    Unity3D_07_日志、文本打印
    Unity3D_06_根据Transform、GameObject和Tag获取子对象集合
    Unity3D_05_理解Unity的新GUI系统(UGUI)
    Unity3D_04_GameObject,Component,Time,Input,Physics
    Unity3D_03_代码及效率优化总结
    Unity3D_02_基类MonoBehaviour/自带函数以及脚本执行的生命周期
    Unity3D_01_各种寻找GameObject方法
    人工智能相关
    ubuntu 安装 typora
  • 原文地址:https://www.cnblogs.com/xinghun/p/5527598.html
Copyright © 2011-2022 走看看