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

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基础知识 八(会话控制)的更多相关文章

  1. 【Java面试】基础知识篇

    [Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...

  2. PHP丨PHP基础知识之流程控制WHILE循环「理论篇」

    昨天讲完FOR循环今天来讲讲他的兄弟WHILE循环!进入正题: while是计算机的一种基本循环模式.当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环.while语句的一般表达式为:whil ...

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

    作为一个JAVA工程师,出去项目拿20k薪资以上,dubbo绝对是面试必问的,即使你对dubbo在项目架构上的作用不了解,但dubbo的基础知识也必须掌握. 整理分享一些面试中常会被问到的dubbo基 ...

  4. PHP面试 PHP基础知识 四(流程控制)

    流程控制 PHP遍历数组的三种方式及各自的区别 三种方式:使用for循环.使用foreach循环.使用while.list().each()组合循环 区别:foe循环只能遍历索引数组,foeach可以 ...

  5. PHP面试 PHP基础知识 十(网络协议)

    网络协议 HTTP协议状态码 状态分为五大类:1XX.2XX.3XX.4XX.5XX 1XX:信息类状态码  表示接受请求正在处理 2XX:success 成功状态码  请求正常处理完毕 3XX:重定 ...

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

    PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch. 替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,e ...

  7. java 基础知识四 流程控制

    java   基础知识四 流程控制 Java流程控制包括顺序控制.条件控制和循环控制 顺序控制就是逐条执行 有if和switch两个分支 循环控制就是 又称为回路控制,根据循环初始条件和终结要求,执行 ...

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

    一.广播机制简介 Android提供了一套完整的API,允许应用程序自由的发送和接受广播,发送广播借助于我们之前学过的:Intent,而接收广播需要借助于广播接收器(Broadcast Receive ...

  9. 代码块、继承、this、super、final(java基础知识八)

    1.代码块的概述和分类 * A:代码块概述 * 在Java中,使用{}括起来的代码被称为代码块.* B:代码块分类 * 根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块( ...

随机推荐

  1. PHP使用引用变量foreach时,切记其他循环不要使用同一个名字的变量

    foreach ($log['data'] as $k => &$value) { if ($value['token'] != 0) { $value['change_num'] = ...

  2. HTML5: HTML5 Web 存储

    ylbtech-HTML5: HTML5 Web 存储 1.返回顶部 1. HTML5 Web 存储 HTML5 web 存储,一个比cookie更好的本地存储方式. 什么是 HTML5 Web 存储 ...

  3. 52、saleforce 导入csv文件

    Load Data Using the Custom Object Import Wizard 1. 2. 3. 4. 5. 6.然后就导入成功了

  4. 大数据学习笔记之Hadoop(一):Hadoop入门

    文章目录 大数据概论 一.大数据概念 二.大数据的特点 三.大数据能干啥? 四.大数据发展前景 五.企业数据部的业务流程分析 六.企业数据部的一般组织结构 Hadoop(入门) 一 从Hadoop框架 ...

  5. ng -v 不是内部或外部命令

    输入 npm install -g @angular/cli ng new my-app 提示ng -v 不是内部或外部命令 解决方法 1.安装过程中是否出错 原因可能是npm install -g  ...

  6. upc组队赛4 TV Show Game 【2-SAT】

    TV Show Game 题目描述 Mr. Dajuda, who is famous for a TV show program, occasionally suggests an interest ...

  7. cocos2d之创建自己的场景类

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 1. 首先创建.h的头文件,然后在将一些图片声音素材加到resource文件夹内,最后在创建.cpp文件:         .h头文件中创 ...

  8. CentOS 7.4安装telnet服务端

    CentOS 7.4安装telnet服务端 安装xinetd服务 # yum -y install xinetd 安装telnet-server # yum -y install telnet-ser ...

  9. Pytest -断言、跳过及运行

    基本断言方法: Pytest框架assert断言使用 • 断言:支持显示最常见的子表达式的值,包括调用,属性,比较以及二元和一元运算 符. • 包含,相等,不等,大于 小于运算,assertnot 假 ...

  10. 如何在web项目中配置Spring的Ioc容器

    在web项目中配置Spring的Ioc容器其实就是创建web应用的上下文(WebApplicationContext) 自定义要使用的IoC容器而不使用默认的XmlApplicationContext ...