• 技术文章 >后端开发 >php教程

    php session 会话(专题)

    PHPzhongPHPzhong2020-08-10 13:29:48原创2211

    php session 专题包含PHP Session概念、基本函数使用方法、PHP Session使用案例、PHP Session视频教程以及相关精选文章,欢迎学习!

    一:PHP Session 是什么?

    官方解释:会话机制(Session)在PHP 中用于保持用户连续访问Web应用时的相关数据,有助于创建高度定制化的程序、增加站点的吸引力。

    要理解什么是php session,首先要理解什么是会话机制

    会话机制

    HTTP 是基于无连接的网络协议, 每一次访问,对于服务器来说,都是全新的

    如果记住访问者,以及记录连接状态, 可以提升用户体验,完成许多个性化的功能,例如用户登录、购物车等

    其实让服务器记住用户的方式很简单, 就和生活中, 我们办会员卡是一样的

    会员卡的存储位置有二个地方, 要么放在你身上,要么保存到商家电脑中

    所以,网络中的用户资料也会保存在二个地方:浏览器(客户端)和服务器中

    保存到浏览器中的叫: cookie

    保存到服务器中的叫: session

    延伸知识:php中session和cookie的区别

    相关专题:php cookie(图文专题)

    PHP Session 要点

    二:PHP Session 基本函数介绍

    1.session_create_id

    创建新会话id

    session_create_id ([ string $prefix ] ) : string

    参数

    返回值

    返回当前会话的新的无冲突会话id。如果在没有活动会话的情况下使用它,则会忽略冲突检查。

    2.session_destroy

    销毁一个会话中的全部数据

    session_destroy ( void ) : bool

    返回值

    成功时返回 TRUE, 或者在失败时返回 FALSE。

    3.session_id

    获取/设置当前会话 ID

    session_id ([ string $id ] ) : string

    参数

    返回值

    返回当前会话ID。 如果当前没有会话,则返回空字符串("")。

    4.session_name

    读取/设置会话名称

    session_name ([ string $name ] ) : string

    参数

    返回值

    返回当前会话名称。如果指定 name 参数,那么此函数会更新会话名称,并且 返回 原来的 会话名称。

    5.session_start

    启动新会话或者重用现有会话

    session_start ([ array $options = array() ] ) : bool

    参数

    返回值

    成功开始会话返回 TRUE ,反之返回 FALSE

    6.session_status

    返回当前会话状态

    session_status ( void ) : int

    返回值

    PHP_SESSION_DISABLED 会话是被禁用的。

    PHP_SESSION_NONE 会话是启用的,但不存在当前会话。

    PHP_SESSION_ACTIVE 会话是启用的,而且存在当前会话。

    7.session_unset

    释放所有的会话变量

    session_unset ( void ) : void

    三:使用案例

    1、session基本操作

    PHP Session 的常用基本操作

    <?php
    //开启session会话
    session_start();
    
    
    //设置session
    $_SESSION['username'] = 'adminuser';
    
    
    //获取session
    $username = $_SESSION['username'];
    
    
    //删除session
    unset($_SESSION['username']);
    
    
    //清空session
    session_unset();
    //或
    $_SESSION = [];
    
    
    //销毁session
    session_destroy();

    2、浏览器禁用 cookie 解决方法

    cookie和session的区别在于cookie是保存在客户端的,而session是存储在服务端中。它们都有生存时间的设置,session比cookie更安全。

    当服务端与客户端通信后会生成会话后,会建立一个和浏览器的唯一会话PHPSESSID。这个id会在服务端保存,也会用cookie形式保存在客户端中。

    禁用cookie后session不能把唯一id通过cookie方式在客户端中进行存储,这时候php会在浏览器地址栏中以url明文get的方式来传递phpsessionid,来进行客户端和服务端的唯一识别通信。

    这样一来程序的安全性大大降低了。所有在php.ini默认是关闭通过地址栏传递phpsessionid的,如果没开启就不能使用session,所以需要php.ini配置支持才行。

    session.use_only_cookies = 1; // 开启仅使用cookies存放会话id           
    session.use_trans_sid = 1;     // 允许Sessionid通过URL明文传输,默认为0关闭

    或者使用代码来实现

    /**
     * 兼容 php7.1 以下版本
     */
    if (!function_exists('session_create_id')) {
        function session_create_id()
        {
            return uniqid();
        }
    }
    
    //获取SESSION_ID
    $session_id = isset($_GET['SESSION_ID']) ? $_GET['SESSION_ID'] : session_create_id();
    
    //设置 SESSION_ID
    session_id($session_id);
    
    //开启session
    session_start();
    
    $_SESSION['user'] = 'user01';
    
    //echo $_SESSION['user'];
    
    echo $session_id;

    3、浏览计数器

    利用 session 机制可以实现 记录用户的访问页面的次数,代码如下:

    <?php
    //开启session
    session_start();
    
    //判断是否设置浏览数
    if (isset($_SESSION['view_num'])) {
        //如果设置 浏览数加 1
        $_SESSION['view_num'] = $_SESSION['view_num'] + 1;
    } else {
        //如果未设置 设置浏览数为 1
        $_SESSION['view_num'] = 1;
    }
    
    die('当前浏览数为:' . $_SESSION['view_num']);
    ?>

    4、使用 session 实现登录功能

    对于 Cookie 来说,假设我们要验证用户是否登陆,就必须在 Cookie 中保存用户名和密码(可能是 md5 加密后字符串),并在每次请求页面的时候进行验证。

    如果用户名和密码存储在数据库,每次都要执行一次数据库查询,给数据库造成多余的负担。因为我们并不能 只做一次验证。为什么呢?

    因为客户端 Cookie 中的信息是有可能被修改的。假如你存储 $admin 变量来表示用户是否登陆,$admin 为 true 的时候表示登陆,为 false 的时候表示未登录,在第一次通过验证后将 $admin 等于 true 存储在 Cookie,下次就不用验证了,这样对么?错了,假如有人伪造一个值为 true 的 $admin 变量那不是就立即取的了管理权限么?非常的不安全。

    而 Session 就不同了,Session 是存储在服务器端的,远程用户没办法修改 Session 文件的内容,因此我们可以单纯存储一个 $admin 变量来判断是否登陆,首次验证通过后设置 $admin 值为 true,以后判断该值是否为 true,假如不是,转入登陆界面,这样就可以减少很多数据库操作了。

    而且可以减少每次为了验证 Cookie 而传递密码的不安全性了(Session 验证只需要传递一次,假如你没有使用 SSL 安全协议的话)。即使密码进行了 md5 加密,也是很容易被截获的。

    当然使用 Session 还有很多优点,比如控制容易,可以按照用户自定义存储等(存储于数据库)。

    下面是一个简单的用户登录示例:

    <?php
    session_start();
    
    //判断是否登录
    if (isset($_SESSION['login_user'])) {
        die('已登录!当前登录用户为:' . $_SESSION['login_user']);
    }
    
    //判断是否为POST请求
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    
        //检查是否输入用户名
        if (!isset($_POST['username']) || empty($_POST['username'])) {
            die('请输入用户名!');
        }
    
        //检查是否输入密码
        if (!isset($_POST['password']) || empty($_POST['password'])) {
            die('请输入密码!');
        }
    
        //模拟数据
        $data = ['username' => 'user01', 'password' => md5('123456')];
    
        //检查用户名是否正确
        if ($_POST['username'] === $data['username']) {
            //检查密码是否正确
            if (md5($_POST['password']) === $data['password']) {
                //保存登录状态
                $_SESSION['login_user'] = $_POST['username'];
                die('恭喜你登录成功!');
            }
        }
    
        //用户名或密码不正确
        die('用户名或密码不正确!');
    }
    ?>
    <html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="=device-width, initial-scale=1.0">
        <title>用户登录</title>
    </head>
    <body>
    <form action="./session02.php" method="post">
        <input type="text" name="username" placeholder="请输入用户名!">
        <input type="password" name="password" placeholder="请输入密码!">
        <button type="submit">登录</button>
    </form>
    </body>
    </html>

    四:PHP Session 视频教程

    37.png

    1.PHP中session如何存储及删除变量的

    2.PHP如何用session来判断用户是否登录

    3.PHP如何用session来记录用户登陆信息

    4.php视频教程之PHP会话管理

    5.PHP视频教程之会话控制session的工作机制

    6.PHP高级视频教程之和session存储相关的一些面试题

    7.ThinkPHP5基础讲解视频教程之Session的使用

    8.ThinkPHP5基础讲解视频教程之Session的使用

    9.PHP经典实战视频教程之SESSION示例(购物车)

    10.会话管理视频教程

    11.Blog项目实战之session原理

    五:PHP Session 精选技术文章

    1.PHP7中创建session和销毁session的方法

    2.利用php设置一个严格控制过期时间的session

    3.php三种清空session的方式

    4.PHP设置web集群session同步步骤详解

    5.通过Session对用户操作权限进行判断的实例详解

    6.Redis保存PHP Session的方法

    7.Laravel使用Redis共享Session(代码详解)

    8.ThinkPHP6.0:Session和Cookie机制的变化

    9.PHP中Session ID的实现原理分析

    10.php实现会员登陆注册页有html加Session和Cookie

    11.php通过session_id恢复session内容

    12.深入介绍PHP.ini中的session主要配置

    13.微信小程序之获取session_key与openid的案例(图)

    14.Session共享:php和redis集群如何实现Session共享

    15.redis实现session共享的方法介绍

    16.tp5实现登录并保存session,再由不同角色权限跳转页面

    17.理解php session运行机制

    18.PHP获取不到SESSION信息之一般情况解决方案

    19.PHP+Session防止表单重复提交步骤详解

    20.PHP保持Session不过期的方法

    21.PHP提高SESSION响应速度的方法

    22.MemCache缓存与Session(知识汇总)

    23.前端获得session信息的几种方式的对比

    24.Laravel处理session(会话)的方法详解

    以上就是php session 会话(专题)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php session
    上一篇:案例分析PHP Web表单生成器 下一篇:推荐给新手的四款PHP集成开发环境软件
    大前端线上培训班

    相关文章推荐

    • php session_cache_limiter函数怎么用• php session_id函数怎么用• php session_name函数怎么用• php session_start函数怎么用

    全部评论我要评论

  • 夏骄阳

    文章真的很好

    2020-07-12

  • 钟老师

    php session 专题,欢迎提出建议,不断完善!

    2020-07-13

  • 取消发布评论发送
  • 1/1

    PHP中文网