PHP面试 PHP基础知识 八(会话控制)

---恢复内容开始---

PHP会话控制技术

  首先了解一下为什么要使用会话控制技术?

  本身web 与服务器的交互是通过HTTP协议来实现的,而HTTP协议又是无状态协议。就是说明HTTP协议没有一个內建机制来维护web与服务器之间的状态。所以同一个用户请求同一个页面两次的时候,HTTP协议不会认为这两次请求来自同一个web,会把这两次请求隔离开。会认为是两个不同的用户来请求的。如果这个用户执行了登陆操作,再次请求页面。HTTP协议不会认为该用户做过登陆操作。因为HTTP协议无法保留登陆状态,无法在不同页面之间进行跟踪和状态保持。会话控制就是保留用户的状态,用来跟踪和对用户的状态保持。

  cookie和session

  cookie是一种由服务器发给客户端的片段信息,存储在客户端浏览器的内存或者硬盘当中的技术。

  就是存储在浏览器当中的一个文件。

  cookie的优点和缺点

  优点:cookie存储在客户端,不会占用服务器端的资源。

  缺点:也是存储在客户端,不建议将一些敏感重要的数据保存到cookie当中。而且用户有权限在浏览器禁止cookie的使用,一旦用户禁止cookie无法保存用户信息。

  cookie的不可跨域名性

  不可跨域名性是什么意思呢?目前很多网站都会使用cookie,比如客户端说访问A网站,A网站会给客户端颁发一个cookie。客户端访问B网站,B网站也会给客户端颁发一个cookie。那么客户端访问B网站会不会带着A网站的cookie?B网站可不可以修改A网站颁发给客户端的cookie呢?

  答案肯定是不可以的。cookie具有不可跨域名性,根据cookie的规范,客户端访问B网站只会携带B网站颁发的cookie,从而B网站只能操作B网站颁发的cookie,不能修改A网站的cookie。

  cookie是客户端浏览器来管理的,浏览器能保证B只操作B不会操作A,从而保证用户的隐私安全。

  浏览器又是怎么管理的呢?

  浏览器判断一个网站能否操作另一个网站的cookie是根据域名,A网站和B网站的域名不同,所以B不能修改A的cookie。

cookie的操作

存储cookie
setcookie(name,value,expire,path,domain,secure)
参数
    name     键名
    value     存储的cookie值
    expire    cookie过期时间
    path       规定的cookie服务器路径
    domain   规定cookie的域名
    secure    是否通过HTTP传输cookie

读取cookie

$_COOKIE

删除cookie

setcookie(name,‘‘,time()-1000);

  session是存在服务器的一种用来存放用户数据的类hashtable结构。

  当浏览器向服务器发送第一次请求的时候。服务器会生成一个hashtable和一个sessionid,sessionid用来标识hashtable,服务器返回浏览器的时候会把sessionid一起返回。第二次浏览器请求的时候会携带第一次的sessionid,服务器根据sessionid来查找相匹配的hashtable.

  session的优点和缺点

  优点:安全性高      缺点:占用服务器资源。

  推荐一个详解cookie和session的博客:https://www.cnblogs.com/yaowen/p/4819018.html

使用session   首先开启session

session_start()

操作session

$_SESSION;   这里不详细介绍    可以参考百度

清除session

$_SESSION = [];

session_distory();   删除session文件并把sessionid删除

session相关配置

session.auto_start   session是否自动开启
session.cookie_domain   session的有效域名
session.cookie_lifetime   session存储在cookie的最大生命周期
session.cookie_path     session存储在cookie的路径
session.name    cookie存储sessionid的键名
session.save_path  session存储在服务器的路径
session.use_cookies 是否使用cookie传递sessionid
session.use_trans_id  是否可以使用连接传递sessionid

session垃圾回收机制
session.gc_probability    清理次数
session.gc_divisor          请求次数
session.gc_maxlifetime   最大生命周期  超过生命周期 视为垃圾

到达访问次数  就会清理一次垃圾

session.save_handle   session存储方式   如:mysql  redis  memcache
  cookie 和session的区别

  1、cookie保存在客户端,服务器可以知道其中的信息。session存储在服务器端,客户端不知道其中的信息。

  2、session保存的是对象,cookie保存的是字符串。

  3、session不能区分路径,在同一个网站下在所有地方都可以访问到session,如果cookie设置了路径,那么同一个网站下不同路径的cookie互相是不能访问的。

  cookie与session的联系

  session是依赖于cookie才能正常工作,如果用户在客户端禁用了cookie那么session也将失效。

  为什么cookie禁用session也失效?

  因为session在客户端也需要保存一个唯一标识(就是sessionid),那么就需要用到cookie,sessionid是存在cookie当中的,使用$_COOKIE[‘PHPSESSID‘]可以获取sessionid,所以禁掉cookie,session也不能使用。

  禁用cookie后如何传递sessionid值?

  1、可以修改配置

    session.use_cookies = 0;设置客户端不用cookie保存sessionid值

    session.use_only_cookies = 1;  是否只使用cookie传递sessionid

    session.use_trans_sid = 1;  url自动加上PHPSESSID  这样session正常使用

  2、使用url传递sessionid

    <a href="indx.php?<?php echo session_name(). ‘=‘ .session_id();?>"></a>

    SID常量在禁用cookie的时候就是session_name和session_id的拼接,否则就是null

    <a href="indx.php?<?php echo SID;?>"></a>

原文地址:https://www.cnblogs.com/dcrq/p/11053926.html

时间: 2024-10-25 19:56:56

PHP面试 PHP基础知识 八(会话控制)的相关文章

死磕面试 - Dubbo基础知识37问(必须掌握)

作为一个JAVA工程师,出去项目拿20k薪资以上,dubbo绝对是面试必问的,即使你对dubbo在项目架构上的作用不了解,但dubbo的基础知识也必须掌握. 整理分享一些面试中常会被问到的dubbo基础知识,或许会给正在面试.准备面试的小伙伴一点帮助. 1.dubbo是什么? dubbo是阿里的开源的基于java的高性能rpc分布式服务框架,现已(2018)成为Apache基金会的孵化项目 2.为什么要用到dubbo(你们技术选型的时候为什么要考虑到用它)? 因为它是阿里的开源项目,国内很多的互

Linux基础知识八

1.请描述网桥.集线器.二层交换机.三层交换机.路由器的功能.使用场景与区别. 网桥也叫桥接器,是连接两个局域网的一种存储/转发设备,用来连接不同网段,使其透明通信,它们工作在链路层.处理的是链路层数据,一般来说就是以太网帧格式的数据,缺点是无法避免"广播风暴". 集线器的基本功能是信息分发,它把一个端口接收的所有信号向所有端口分发出去.一些集线器在分发之前将弱信号重新生成,一些集线器整理信号的时序以提供所有端口间的同步数据通信,工作在物理层,集线器只是把各个终端互相连接起来而已,处理

【基础知识八】集成学习

难点:如何产生"好而不同"的个体学习器:"好而不同":"准确性"和"多样性" 一.个体与集成 构建并结合多个学习器来完成学习任务 集成:结果通过投票法voting产生,"少数服从多数" 获得整体性能提升要求个体学习器:好而不同 1)个体学习器有一定的"准确性" 2)学习器间具有差异 集成学习的错误率: 假设基学习器的误差相互独立,随着集成中个体分类器数目T的增大,集成的错误率将指数级下降

基础知识回顾——流程控制

通过条件语句或循环语句改变程序运行顺序的过程叫流程控制. 条件语句 条件语句:用于改变程序的执行流程,其中else代码块是可选的.1.if/else 1 pwd = raw_input("what's the password ?") 2 if pwd == 'apple': 3 print "loging on..." 4 else: 5 print "password error!" 6 print "all done"

PHP基础知识之流程控制的替代语法

PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch. 替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;. <?php if ($a == 5): ?>A is equal to 5<?php endif; ?> <?phpif ($a == 5):    echo "a equals 5

PS基础知识八

通道: 1.  通道分类: (1)      红色 (2)      绿色通道 (3)      蓝色通道 (4)      RGB通道,也称综合通道 (5)      Alpha通道 (6)      专色通道(只显示金色和银色,用来印刷) 图: 2.  Alpha通道的作用: 得到一个特殊的选取(复杂形状的选取) 3.  滤镜 例子:复杂选框.多边形相框 步骤一:打开一个图片,在通道面板中,新建alpha通道,填充白色:如: 步骤二:去掉选取,在菜单"滤镜"中选择"扭曲&

Android学习之基础知识八—Android广播机制

一.广播机制简介 Android提供了一套完整的API,允许应用程序自由的发送和接受广播,发送广播借助于我们之前学过的:Intent,而接收广播需要借助于广播接收器(Broadcast Receiver) 广播的类型主要分为两种:标准广播和有序广播. 标准广播:一种完全异步执行的广播,在广播发出之后,所有接收器几乎在同一时刻接收到这条广播消息,因此它们之间没有任何的先后顺序可言,这种广播的效率会比较高,但是同时也意味着它无法被截断的.标准广播的工作流程图如图所示: 有序广播:一种同步执行的广播,

Linux 基础知识(八)

一.systemd查看日志文件有隐藏 systemctl status SERVICE -l -l选项显示完整选项 journalctl -u SERVICE使用journalct命令查看 二.写一个systemd的配置文件, 让nginx服务可以开机启动 [Unit] Description=nginx [Service] Type=forking PIDFile=/var/run/nginx.pid ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.

PHP面试 PHP基础知识 二(常量及数据类型)

常量及数据类型 PHP八种数据类型 四种标量类型 字符串(string).布尔(boolean).浮点(float/double).整型(integer) 两种复合类型 数组(array).对象(object) 两种特殊类型 资源(resource)  null PHP的字符串的定义方式及各自区别? 定义方式:单引号  双引号  heredoc 和 newdoc 区别:单引号的效率高于双引号 单引号 单引号不能解析变量 单引号不能解析转义字符,自能解析单引号和反斜线本身 变量和变量.变量和字符串