zoukankan      html  css  js  c++  java
  • 会话控制:SESSION,COOKIE

    1、http协议:

    HTTP—超文本传输协议,在TCP协议(长连接、像一个硬件)基础上;

    特点:短连接,无状态协议,没法记录本次连接的状态;适用于静态页面的访问,对于后期某些页面是需要浏览器预知客户信息才能登陆的,这是http协议满足不了的,为此引进session和cookie两种方法;

    session和cookie并不能使http变为长连接,也就不能从根本上解决http的无状态性,只是暂时辅助,记录本次请求的状态。

    2、SESSION:

    效果:

    比如淘宝登录页面,进入主页面之后,如果15分钟以内不进行任何操作,自动返回登录页面;

    防止绕过登录页面直接访问主页面,如果知道一个主页面的网址,可以直接访问,但是如果有session可以防止访问,if(empty(session["uid"])){header "location:logyemian.php"};

    特点:

    (1)存储在服务器

    (2)每个使用者都会生成一个session

    (3)有默认过期时间,15分钟左右

    (4)可以存储任何类型数据,比如,session["uid"] 是一个变量,可以存储数组,session["uid"]=array()是对的,a=array()语法是没错的;

    3、COOKIE

    特点:

    (1)存储在客户端;当你访问一些页面的时候,会把一些信息存储在自己的电脑上,当清除浏览信息时会有提示

    (2)每个使用者会生成一个cookie

    (3)默认没有过期时间,可以设置

    (4)只能存储字符串

    相对而言,session方式将用户数据存储在服务器上更安全,但对服务器的压力大。

    将登陆信息等重要信息存放为SESSION
    其他信息如果需要保留,可以放在COOKIE中

    4、使用

    (1)session:

    session_stat();//使用session的页面必须在第一行代码开启session

    $_SESSION["uid"]="张三";//赋值

    echo $_SESSION["uid"];//取值

    注意:

    只要一个页面执行了session赋值,那么其他页面都能获取到这个值,因为session是存在服务器上。

    存储方式不一样获取方式也就不一样,多个用户可以用多个标识存session。

    session只能在同一个浏览器取到,在这个浏览器赋值,在另一个浏览器取值是取不到的;

    session在关闭浏览器的时候,自动清空;

    一个浏览器只能登陆一个用户名,多个浏览器可以登陆多个;

    (2)COOKIE

    setcookie("name","值");//赋值

    echo $_COOKIE["name"];//取值

    一个页面赋值其他页面都能取到;

    注意:做程序时候,一定要先选用一种会话控制(session/cookie)

    实例1:做一个完整的登录页面(防止绕过登录页面,直接进入主页面)

    (因为对于登录页面,输入用户名和密码-->主页面,如果没有会话控制,只要输入主页面网址,就可直接访问,所以有bug)

     登录页面:

    <body>
    <form action="main1.php" method="post">
    <div>用户名:<input type="text" name="uid" /></div>
    <div>密码:&nbsp;<input type="text" name="pwd" /></div>
    <input type="submit" value="登录"/>
    </form>
    </body> 

    登录处理页面:

    <?php
    session_start();//开头启用session
    include ("../dbda.class.php");
    $uid=$_POST["uid"];
    $pwd=$_POST["pwd"];
    
    
    $dx=new Dbda();
    $sql="select nation from nation where name='{$uid}'";
    //var_dump($sql);
    $res=$dx->query($sql);
    //var_dump($res);
    if(!empty($res))
    {
        foreach($res as $v)
        {
            if($v[0]==$pwd)
            {    
                $_SESSION["uid"]=$uid;//赋值,因为存在用户名时候才有意义
                header("location:main.php");
            }
            else
            {
                echo "密码错误";
            }
        }
    }
    else
    {
        echo "用户名不存在";
        }

    主页面:

    <body>
    <?php
    session_start();//启用session
    if(empty($_SESSION["uid"]))
    {
        header("location:log.php");
    }//防止直接进入主页面
    ?>
    <h1>主页面</h1>
    </body>
  • 相关阅读:
    MySQL索引的操作
    MySQL表的操作02
    MySQL表的操作01
    字典实现简单购物车程序
    python 中if和elif的区别
    格式化操作---%方法
    正则表达式相关知识
    实现 像网易云音乐 播放列表那样的弹出型Dialog
    为什么在非UI线程中操作UI的改变失不安全的
    模板方法模式-Template Method
  • 原文地址:https://www.cnblogs.com/jinshui/p/5619794.html
Copyright © 2011-2022 走看看