PHP面试常考之会话控制
你好,是我琉忆,欢迎您来到PHP面试专栏。
本周(2019.2-25至3-1)的一三五更新的文章如下:
周一:PHP面试常考之会话控制
周三:PHP面试常考之网络协议
周五:PHP面试常考题之会话控制和网络协议
送两本书,活动参与链接:
《PHP 程序员面试笔试真题解析》segmentfault.com
以下正文的内容来自《PHP程序员面试笔试宝典》书籍,如果转载请保留出处:
最近是换工作潮自己刻意“汇总整理了11篇带解析的PHP面试题的文档”,已上传百度云,关注公众号:“琉忆编程库”,回复:“php”,下载链接我发给你。
一、session
PHP的会话也称为Session。PHP在操作Session时,当用户登录或访问一些初始页面时服务器会为客户端分配一个SessionID。SessionID是一个加密的随机数字,在Session的生命周期中保存在客户端。它可以保存在用户机器的Cookie中,也可以通过URL在网络中进行传输。
用户通过SessionID可以注册一些特殊的变量,称为会话变量,这些变量的数据保存在服务器端。在一次特定的网站连接中,如果客户端可以通过Cookie或URL找到SessionID,那么服务器就可以根据客户端传来的SessionID访问会话保存在服务器端的会话变量。
Session的生命周期只在一次特定的网站连接中有效,当关闭浏览器后,Session会自动失效,之前注册的会话变量也不能再使用。具体的使用步骤如下:
1)初始化会话。在实现会话功能之前必须要初始化会话,初始化会话使用session_start()函数。
bool session_start(void)
该函数将检查SessionID是否存在,如果不存在,则创建一个,并且能够使用预定义数组$_SESSION进行访问。如果启动会话成功,则函数返回TRUE,否则返回FALSE。会话启动后就可以载入该会话已经注册的会话变量以便使用。
2)注册会话变量。自PHP 4.1以后,会话变量保存在预定义数组$_SESSION中,所以可以以直接定义数组单元的方式来定义一个会话变量,格式如下:
$_SESSION["键名"]="值";
会话变量定义后被记录在服务器中,并对该变量的值进行跟踪,直到会话结束或手动注销该变量。
3)访问会话变量。要在一个脚本中访问会话变量,首先要使用session_start()函数启动一个会话。之后就可以使用$_SESSION数组访问该变量了。
4)销毁会话变量。会话变量使用完后,删除已经注册的会话变量以减少对服务器资源的占用。删除会话变量使用unset()函数,语法格式如下:
void unset(mixed $var [, mixed $var [, $... ]])
说明:$var是要销毁的变量,可以销毁一个或多个变量。要一次销毁所有的会话变量,使用session_unset();。
5)销毁会话。使用完一个会话后,要注销对应的会话变量,然后再调用session_destroy()函数销毁会话,语法格式如下:
bool session_destroy ( void )
该函数将删除会话的所有数据并清除SessionID,关闭该会话。
最近是换工作潮自己刻意“汇总整理了11篇带解析的PHP面试题的文档”,已上传百度云,关注公众号:“琉忆编程库”,回复:“php”,下载链接我发给你。
二、cookie
Cookie可以用来存储用户名、密码、访问该站点的次数等信息。在访问某个网站时,Cookie将html网页发送到浏览器中的小段信息以脚本的形式保存在客户端的计算机上。
一般来说,Cookie通过HTTP Headers从服务器端返回浏览器。首先,服务器端在响应中利用Set Cookie Header来创建一个Cookie。然后浏览器在请求中通过Cookie Header包含这个已经创建的Cookie,并且将它返回至服务器,从而完成浏览器的验证。
Cookie技术有很多局限性,例如:
1)多人共用一台计算机,Cookie数据容易泄露。
2)一个站点存储的Cookie信息有限。
3)有些浏览器不支持Cookie。
4)用户可以通过设置浏览器选项来禁用Cookie。
正是由于以上Cookie的一些局限性,所以,在进行会话管理时,SessionID通常会选择Cookie和URL两种方式来保存,而不是只保存在Cookie中。
具体而言,Cookie的使用步骤如下:
1)创建Cookie。在PHP中创建Cookie使用setcookie()函数,语法格式如下:
bool setcookie(string $name [, string $value [, int $expire [, string $path [, string $domain [, bool $secure [, bool $httponly ]]]]]])
① $name:表示Cookie的名字。
② $value:表示Cookie的值,该值保存在客户端,所以不要保存比较敏感的数据。
③ $expire:表示Cookie过期的时间,这是一个UNIX时间戳,即从UNIX纪元开始的秒数。对于$expire的设置一般通过当前时间戳加上相应的秒数来决定。例如,time()+1200表示Cookie将在20min后失效。如果不设置则Cookie将在浏览器关闭之后失效。
④ $path:表示Cookie在服务器上的有效路径。默认值为设定Cookie的当前目录。
⑤ $domain:表示Cookie在服务器上的有效域名。例如,要使Cookie能在http://example.com域名下的所有子域都有效,该参数应设为".http://example.com"。
2)访问Cookie。通过setcookie()函数创建的Cookie是作为数组的单元,存放在预定义变量$_COOKIE中。也就是说,直接对$_COOKIE数组单元进行赋值也可以创建Cookie。但$_COOKIE数组创建的Cookie在会话结束后就会失效。
3)删除Cookie。Cookie在创建时指定了一个过期时间,如果到了过期时间,那么Cookie将自动被删除。在PHP中没有专门删除Cookie的函数。如果为了安全方面的考虑,在Cookie过期之前就想删除Cookie,那么可以使用setcookie()函数或$_COOKIE数组将已知Cookie的值设为空。
示例代码如下:
<?php
$_COOKIE["user"]="administrator";
setcookie("password","123456",time()+3600);
$_COOKIE["user"]=""; //使用$_COOKIE清除Cookie
setcookie("password",""); //使用setcookie()函数清除Cookie
print_r($_COOKIE); //输出:Array ( [user] => )
?>
Cookie和Session都是用来实现会话机制的,由于HTTP协议是无状态的,所以要想跟踪一个用户在同一个网站之间不同页面的状态,需要有一个机制,称为会话机制。
预告:本周三更新PHP面试常考之网络协议,敬请期待。
以上内容摘自《PHP程序员面试笔试宝典》书籍,该书已在天猫、京东、当当等电商平台销售。
更多PHP相关的面试知识、考题可以关注公众号获取:琉忆编程库
对本文有什么问题或建议都可以进行留言,我将不断完善追求极致,感谢你们的支持。
PHP面试常考之会话控制的更多相关文章
- php面试专题---9、会话控制考点
php面试专题---9.会话控制考点 一.总结 一句话总结: 面向对象.设计模式这些特别好用,需要融会贯通 1.请写出PHP类权限控制修饰符? public.protected.private 2.p ...
- PHP面试常考内容之面向对象(1)
PHP中面向对象常考的知识点有以下几点,我将会从以下几点进行详细介绍说明,帮助你更好的应对PHP面试常考的面向对象相关的知识点和考题. 整个面向对象文章的结构涉及的内容模块有: 一.面向对象与面向过程 ...
- 前端面试常考知识点---CSS
前端面试常考知识点---js 1.CSS3的新特性有哪些 点我查看 CSS3选择器 . CSS3边框与圆角 CSS3圆角border-radius:属性值由两个参数值构成: value1 / valu ...
- php面试专题---8、会话控制考点
php面试专题---8.会话控制考点 一.总结 一句话总结: 主要是cookie和session的区别,以及用户禁用cookie之后怎么使用session 1.为什么要使用会话控制技术? 因为http ...
- PHP面试常考内容之Memcache和Redis(2)
你好,是我琉忆.继周一(2019.2-18)发布的"PHP面试常考内容之Memcache和Redis(1)"后,这是第二篇,感谢你的支持和阅读.本周(2019.2-18至2-22) ...
- PHP面试常考内容之Memcache和Redis(1)
你好,是我琉忆.继上周(2019.2-11至2-15)发布的"PHP面试常考内容之面向对象"专题后,发布的第二个专题,感谢你的阅读.本周(2019.2-18至2-22)的文章内容点 ...
- PHP面试常考内容之面向对象(3)
PHP面试专栏正式起更,每周一.三.五更新,提供最好最优质的PHP面试内容.继上一篇"PHP面试常考内容之面向对象(2)"发表后,今天更新面向对象的最后一篇(3).需要(1),(2 ...
- PHP面试常考内容之面向对象(2)
PHP面试专栏正式起更,每周一.三.五更新,提供最好最优质的PHP面试内容.继上一篇"PHP面试常考内容之面向对象(1)"发表后,今天更新(2),需要(1)的可以直接点击文字进行跳 ...
- 面试常考的常用数据结构与算法(zz)
数据结构与算法,这个部分的内容其实是十分的庞大,要想都覆盖到不太容易.在校学习阶段我们可能需要对每种结构,每种算法都学习,但是找工作笔试或者面试的时候,要在很短的时间内考察一个人这方面的能力,把每种结 ...
随机推荐
- nginx高并发配置详解
https://www.cnblogs.com/liqiu/p/3152206.html 1. worker_processes 8; nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数 ...
- mysql数据库忘记root密码怎么办?
mysql数据库忘记root密码怎么破解和修改 1.停止数据库的运行 [root@localhost ~]# /etc/init.d/mysqld stop 或者[root@localhost ~]# ...
- 原生android webview 显示的H5页面颜色属性无法识别 - 具体解决心得
1.前言 background-color: #fc1717bf; 这个样式属性没毛病吧,浏览器都是支持的,但是在android 7.0 系统无法正确识别这个含有透明度的属性, 即bf无法识别,将默认 ...
- vue组件中的.sync修饰符使用
在vue的组件通信props中,一般情况下,数据都是单向的,子组件不会更改父组件的值,那么vue提供.sync作为双向传递的关键字,实现了父组件的变动会传递给子组件,而子组件的carts改变时,通过事 ...
- Spark本地环境实现wordCount单词计数
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6814778610788860424/ 编写类似MapReduce的案例-单词统计WordCount 要统计的文件为 ...
- vue js格式化数字为金额格式
/** * @description 格式化金额 * @param number:要格式化的数字 * @param decimals:保留几位小数 默认0位 * @param decPoint:小数点 ...
- SYCOJ1018神奇的幻方
题目-神奇的幻方 (shiyancang.cn) 模拟就对了 因为每一个状态由前一个状态决定,所以只需要记录即可 #include<bits/stdc++.h> using namespa ...
- Visual Studio 2019 与 Visual Studio 2022的下载方式
相信大家目前百度或者其他搜索引擎搜索到的都是2022了,那么vs2019该如何安装呢? vs2019下载地址:https://visualstudio.microsoft.com/zh-hans/th ...
- Android官方文档翻译 十三 3.1Supporting Different Languages
Supporting Different Languages 支持不同语言 This class teaches you to 这节课教给你 Create Locale Directories and ...
- Docker环境安装,基本命令集合
一.docker安装 1).卸载旧的安装包 centos7默认安装的docker版本是1.13.1,卸载它,安装新的版本. root用户下,一次把这坨命令复制进去 yum remove docker ...