本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,若有侵权请联系我进行删除,email:guoyugygy@163.com
在上一篇中,冷月为你们分享了文件及目录处理考点,你们必定要根据本身的薄弱点进行查漏补缺,尝试着练习目录的复制和删除函数的编写。今天,冷月为你们分享会话控制考点。php
简述cookie和session的区别及各自的工做机制,存储位置等。简述cookie的优缺点。
答案:web
COOKIE:面试
在网站中,http请求是无状态的。也就是说即便第一次和服务器链接后而且登陆成功后,第二次请求服务器依然不能知道当前请求是哪一个用户。cookie的出现就是为了解决这个问题,第一次登陆后服务器返回一些数据(cookie)给浏览器,而后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器经过浏览器携带的数据就能判断当前用户是哪一个了。cookie存储的数据量有限,不一样的浏览器有不一样的存储大小,但通常不超过4KB。所以使用cookie只能存储一些小量的数据。flask
SESSION:数组
session和cookie的做用有点相似,都是为了存储用户相关的信息。不一样的是,cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有必定的弊端,就是会占用服务器的资源,但如今服务器已经发展至今,一些session信息仍是绰绰有余的。浏览器
cookie和session结合使用:安全
web开发发展至今,cookie和session的使用已经出现了一些很是成熟的方案。在现在的市场或者企业里,通常有两种存储方式:服务器
一、存储在服务端:经过cookie存储一个session_id,而后具体的数据则是保存在session中。若是用户已经登陆,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户究竟是谁,以及以前保存的一些状态信息。这种专业术语叫作server side session。cookie
二、将session数据加密,而后存储在cookie中。这种专业术语叫作client side session。flask采用的就是这种方式,可是也能够替换成其余形式。session
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