• php面试笔记(8)-php基础知识-会话控制考点


    本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com

    在上一篇中,冷月为大家分享了文件及目录处理考点,大家一定要根据自己的薄弱点进行查漏补缺,尝试着练习目录的复制和删除函数的编写。今天,冷月为大家分享会话控制考点。

    回顾真题

    简述cookie和session的区别及各自的工作机制,存储位置等。简述cookie的优缺点。

    答案:

    COOKIE:

    在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。

    SESSION:

    session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些session信息还是绰绰有余的。

    cookie和session结合使用:

    web开发发展至今,cookie和session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业里,一般有两种存储方式:

    1、存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经登录,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session。

    2、将session数据加密,然后存储在cookie中。这种专业术语叫做client side session。flask采用的就是这种方式,但是也可以替换成其他形式。

    考点分析

    PHP的会话控制技术

    COOKIE:

    cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。

    操作

    创建cookie

    setcookie(name, value, expire, path, domain);

    <?php
    setcookie("user", "runoob", time()+3600);
    ?>
    

    读取cookie

    PHP 的 $_COOKIE 变量用于取回 cookie 的值。

    <?php
    // 输出 cookie 值
    echo $_COOKIE["user"];
    
    // 查看所有 cookie
    print_r($_COOKIE);
    ?>
    

    删除cookie

    当删除 cookie 时,您应当使过期日期变更为过去的时间点。

    <?php
    // 设置 cookie 过期时间为过去 1 小时
    setcookie("user", "", time()-3600);
    ?>
    

    Session:
    PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。

    操作
    在您把用户信息存储到 PHP session 中之前,首先必须启动会话。

    session_start() 函数

    <?php session_start(); ?>
    

    存储 Session 变量

    存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量:

    <?php
    session_start();
    // 存储 session 数据
    $_SESSION['views']=1;
    ?>
    

    销毁 Session

    如果您希望删除某些 session 数据,可以使用 unset() 或 session_destroy() 函数。unset() 函数用于释放指定的 session 变量:

    <?php
    session_start();
    if(isset($_SESSION['views']))
    {
        unset($_SESSION['views']);
    }
    ?>
    

    配置Session

    session.auto_start

    php.ini配置session.auto_start=0默认关闭,session.auto_start 开启就自动完成了session_start()。

    session.cookie.lifetime

    session.cookie.lifetime 默认是0,即浏览器关闭,session失效;修改这个值的作用是修改sessionid以cookie的形式保留在浏览器的时间长度,也就是说这个值设置一个小时,名为sessionid的cookie就保留在浏览器一个小时,session一个小时后才过期;

    垃圾回收

    session.gc_maxlifetime; 设置过期session时间,默认1440秒(24分钟)

    session.gc_probability/session.gc_divisor; 启动垃圾回收机制的概率(建议值为1/1000——5000)

    session_id()

    session_id — 获取/设置当前会话 ID

    session_name()

    session_name — 读取/设置会话名称

    一网打尽

    session信息的存储方式、如何遍历session

    答案:session是一种服务端机制,服务器使用一种类似于散列表的结构来保存信息,在PHP中直接用$_SESSION数组来遍历即可

    如果这篇博文有帮助到您,可以帮冷月点一个赞或者加一个关注哦!

    欢迎关注我的公众号:学长冷月,获得独家整理的学习资源和日常干货推送。
    如果您对我的专题内容感兴趣,也可以关注我的博客:guoyu7.com

  • 相关阅读:
    设计模式开篇——7大设计原则
    MySQL MVCC专题
    Spring常考的面试题
    HashMap常考面试题
    Equals和==的比较
    高并发编程
    一文读懂JVM
    scala实现定时任务的方法
    PLAY2.6-SCALA(十二) 表单的处理
    PLAY2.6-SCALA(十一) 模板常用场景
  • 原文地址:https://www.cnblogs.com/guoyugy/p/12382529.html
Copyright © 2020-2023  润新知