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:代码块分类 * 根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块( ...
随机推荐
- PHP使用引用变量foreach时,切记其他循环不要使用同一个名字的变量
foreach ($log['data'] as $k => &$value) { if ($value['token'] != 0) { $value['change_num'] = ...
- HTML5: HTML5 Web 存储
ylbtech-HTML5: HTML5 Web 存储 1.返回顶部 1. HTML5 Web 存储 HTML5 web 存储,一个比cookie更好的本地存储方式. 什么是 HTML5 Web 存储 ...
- 52、saleforce 导入csv文件
Load Data Using the Custom Object Import Wizard 1. 2. 3. 4. 5. 6.然后就导入成功了
- 大数据学习笔记之Hadoop(一):Hadoop入门
文章目录 大数据概论 一.大数据概念 二.大数据的特点 三.大数据能干啥? 四.大数据发展前景 五.企业数据部的业务流程分析 六.企业数据部的一般组织结构 Hadoop(入门) 一 从Hadoop框架 ...
- ng -v 不是内部或外部命令
输入 npm install -g @angular/cli ng new my-app 提示ng -v 不是内部或外部命令 解决方法 1.安装过程中是否出错 原因可能是npm install -g ...
- upc组队赛4 TV Show Game 【2-SAT】
TV Show Game 题目描述 Mr. Dajuda, who is famous for a TV show program, occasionally suggests an interest ...
- cocos2d之创建自己的场景类
| 版权声明:本文为博主原创文章,未经博主允许不得转载. 1. 首先创建.h的头文件,然后在将一些图片声音素材加到resource文件夹内,最后在创建.cpp文件: .h头文件中创 ...
- CentOS 7.4安装telnet服务端
CentOS 7.4安装telnet服务端 安装xinetd服务 # yum -y install xinetd 安装telnet-server # yum -y install telnet-ser ...
- Pytest -断言、跳过及运行
基本断言方法: Pytest框架assert断言使用 • 断言:支持显示最常见的子表达式的值,包括调用,属性,比较以及二元和一元运算 符. • 包含,相等,不等,大于 小于运算,assertnot 假 ...
- 如何在web项目中配置Spring的Ioc容器
在web项目中配置Spring的Ioc容器其实就是创建web应用的上下文(WebApplicationContext) 自定义要使用的IoC容器而不使用默认的XmlApplicationContext ...