PHP面试常考之会话控制

你好,是我琉忆,欢迎您来到PHP面试专栏。
本周(2019.2-25至3-1)的一三五更新的文章以下:php

周一:PHP面试常考之会话控制
周三:PHP面试常考之网络协议
周五:PHP面试常考题之会话控制和网络协议

如下正文的内容来自《PHP程序员面试笔试宝典》书籍,若是转载请保留出处:html


最近是换工做潮本身刻意“ 汇总整理了11篇带解析的PHP面试题的文档”,已上传百度云,关注公众号:“ 琉忆编程库”,回复:“ php”,下载连接我发给你。

1、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,关闭该会话。cookie


最近是换工做潮本身刻意“ 汇总整理了11篇带解析的PHP面试题的文档”,已上传百度云,关注公众号:“ 琉忆编程库”,回复:“ php”,下载连接我发给你。

2、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能在example.com域名下的全部子域都有效,该参数应设为".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相关的面试知识、考题能够关注公众号获取:琉忆编程库
图片描述

对本文有什么问题或建议均可以进行留言,我将不断完善追求极致,感谢大家的支持。

相关文章
相关标签/搜索