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>
PHP面试 PHP基础知识 八(会话控制)的更多相关文章
- 【Java面试】基础知识篇
[Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...
- PHP丨PHP基础知识之流程控制WHILE循环「理论篇」
昨天讲完FOR循环今天来讲讲他的兄弟WHILE循环!进入正题: while是计算机的一种基本循环模式.当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环.while语句的一般表达式为:whil ...
- 死磕面试 - Dubbo基础知识37问(必须掌握)
作为一个JAVA工程师,出去项目拿20k薪资以上,dubbo绝对是面试必问的,即使你对dubbo在项目架构上的作用不了解,但dubbo的基础知识也必须掌握. 整理分享一些面试中常会被问到的dubbo基 ...
- PHP面试 PHP基础知识 四(流程控制)
流程控制 PHP遍历数组的三种方式及各自的区别 三种方式:使用for循环.使用foreach循环.使用while.list().each()组合循环 区别:foe循环只能遍历索引数组,foeach可以 ...
- PHP面试 PHP基础知识 十(网络协议)
网络协议 HTTP协议状态码 状态分为五大类:1XX.2XX.3XX.4XX.5XX 1XX:信息类状态码 表示接受请求正在处理 2XX:success 成功状态码 请求正常处理完毕 3XX:重定 ...
- PHP基础知识之流程控制的替代语法
PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch. 替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,e ...
- java 基础知识四 流程控制
java 基础知识四 流程控制 Java流程控制包括顺序控制.条件控制和循环控制 顺序控制就是逐条执行 有if和switch两个分支 循环控制就是 又称为回路控制,根据循环初始条件和终结要求,执行 ...
- Android学习之基础知识八—Android广播机制
一.广播机制简介 Android提供了一套完整的API,允许应用程序自由的发送和接受广播,发送广播借助于我们之前学过的:Intent,而接收广播需要借助于广播接收器(Broadcast Receive ...
- 代码块、继承、this、super、final(java基础知识八)
1.代码块的概述和分类 * A:代码块概述 * 在Java中,使用{}括起来的代码被称为代码块.* B:代码块分类 * 根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块( ...
随机推荐
- IDEA入门使用--二
*)IDEA安装和破解:https://www.cnblogs.com/jajian/p/7989032.html 这次我安装的是最新版2019的IDEA *)导入项目时,根据提示,一步步来.其 ...
- python之绘制函数pyplot初探
我们想将我们手里的数据通过图形的方式展示出来,这样我们更直观的,更可以发现数据带给我们的信息.今天给大家介绍要给python中pyplot绘制函数.一般我们想将手里的数据绘制成图形,分为四大步:1.准 ...
- Android的Context && 安卓常用系统服务(当前运行包名/当前网络状态和开关网络/音频服务/马达服务) (转)
转:http://blog.csdn.net/zhandoushi1982/article/details/8501773 Context字面意思上下文,位于framework 的android.co ...
- 服务安全-OAuth-OAuth2.0:百科
ylbtech-服务安全-OAuth-OAuth2.0:百科 OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 2.0即完全废止了OAuth1.0. OAuth 2.0关注客户端开发 ...
- Jeecg_Jflow整合记录
系统组织机构 t_s_deparselect * from t_s_departselect * from t_s_depart where id='402888fd6a8c24e9016a8c531 ...
- centos为用户添加sudo功能
su chmod a+w /etc/sudoers vim /etc/sudoers [找到root ALL=(ALL) ALL这行] 复制出新的一行,并且将root改为daniel(当前用户名) c ...
- vue/cli3引入cesium
vue/cli3引入cesium 一开始用了webpack结合vue引入vue:结果是各种bug,搞了半天.最后问了基友,发现vue脚手架这个·简单高效的方法,只需要几行代码就轻松地搞定啦! 方案一. ...
- 单机zookeeper部署伪集群
1.zookeeper介绍 ZooKeeper 是一个为分布式应用所设计的分布的.开源的协调服务.分布式的应用可以建立在同步.配置管理.分组和命名等服务的更高级别的实现的基础之上. ZooKeeper ...
- rookit入門
来源:rootkit_com 作者:Clandestiny 翻译:fqh “Help!我是一名新手!我需要一款rootkit入侵朋友的机器…我想编写自己的rootkit…我想开始开发代码… 该从哪里入 ...
- 3.3-Cypher语言及语法使用
Cypher是一种图数据库查询语言,表现力丰富,查询效率高,其地位和作用与关系型数据库中的SQL语言相当. Cypher具备的能力: Cypher通过模式匹配图数据库中的节点和关系,来提取信息或者修改 ...