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:代码块分类 * 根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块( ...
随机推荐
- tar的具体参数和用法!
tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的 ...
- 【lua学习笔记】——环境配置
1 开发平台 windows7 64位 2 下载链接 http://www.lua.org/download.html 3 安装完成-环境配置 4 运行 WIN+R 运行 cmd 运行lua,显示配 ...
- s-cms学校建站重装漏洞
文件位置 ./install/index.php 影响版本 PHP V5.0 过程 通过获取GET请求判断是安装还是结束安装 安装步骤1 安装步骤2 安装步骤3 安装步骤4 解释 安装步骤1-3都没有 ...
- WPF常规表单验证
1:ViewModel 实现验证接口 IDataErrorInfo 2:实现接口的相关验证逻辑,并把错误信息反馈给 Error public string this[string columnName ...
- [已解决]报错: No module named pip
cmd中敲命令: python -m ensurepip 更新升级pip命令: python -m pip install --upgrade pip
- Java中的集合和线程安全
通过Java指南我们知道Java集合框架(Collection Framework)如何为并发服务,我们应该如何在单线程和多线程中使用集合(Collection). 话题有点高端,我们不是很好理解.所 ...
- python操作DB2数据库
#!/usr/bin/env python# -*- coding:utf-8 -*- ########################## excute python2.7.13# sudo pip ...
- spark复习总结03
1.DataFrame的创建方式 1.1 通过加载外部文件创建 //通过sqlContext读取json文件创建DataFrame DataFrame dataFrame=sqlContext.rea ...
- layui的layer独立版报错“TypeError: i is not a function”的解决
折腾良久发现是引入jQuery顺序的问题. jQuery必须在layer引入之前引入.
- 基于React Native的跨三端应用架构实践
作者|陈子涵 编辑|覃云 “一次编写, 到处运行”(Write once, run anywhere ) 是很多前端团队孜孜以求的目标.实现这个目标,不但能以最快的速度,将应用推广到各个渠道,而且还能 ...