http协议是无状态的协议。每次访问页面的http协议都是独立的,正是因为http协议是无状态的,所以导致访问一个页面后再去访问另一个页面的时候,一些数据会消失,比如:用户的登录信息就会消失。那么怎么才能使用户的信息不消失呢?就是使用会话控制。

  当然除了会话控制,有没有什么方法让变量在不同的页面之中都有效。答:有
(1)通过get或post方式从一个页面中传到另一个页面中(只适合传输数据量小的,数据量变大就不合适了)
(2)可以把变量先存储到数据库中,或者使用file_put_content()写入文件中,然后在其他页面使用file_get_content()读取(但是缺点是所有用户共用文件中的数据,如果想要跟踪用户的登录信息,这种做法是            非常不可取的)

(3)cookie技术,是把用户的信息存储到用户自己的电脑里的一个文件中(方法2中是把数据写在服务器的文件中),在设置cookie的那个页面中是不能获取到cookie中的信息的,就是说在设置cookie的页面            中echo  $_COOKIE是 没有数据的。

这样该用户在访问一个网站不同的页面的时候,他的登录信息就可以实现跟踪。  setCookie()设置cookie,,,注意:setCookie之前不能有任何的输出(像echo,print_r等等)。否则会报错。(提一下,基本上头信息之前都不能有输出,比如header)

  2.session:上面说了cookie是把数据存在客户端的文件,而程序是不能操作客户端的数据的并且用户是可以阻止cookie的(不用cookie存储 数据),数据存在客户端也是不安全的。这个时候session就出现了,session是把数据存在服务器端的文件中(数据库、redis都行)。但是用户有很多,比如张三、李四,怎么找到张三的信息呢?就是session_id,在使用session的时候,每个用户会得到一个唯一的session_id,以后每次张三登录的时候,就可以凭借session_id去调用存在session中数据信息。   session_id的存储有两种: 一种是基于cookie,就是存到cookie中;第二种,通过URL传输session_id。

  (2)session_start()开启之前不能有任何输出,还有就是     <?php   之前不能有空格、空行,他也相当于是输出。session_start有两个作用,一是创建session_id,当你第一次开启session,他会创建session_id保存到cookie中(可以使用$_COOKIE查看);二是当已经分配session_id情况下,session_start就不在创建新的ID,而是用之前的ID来开启会话。

  (3)开启session方式:1.每个页面必须都有session_start才行,2.或者通过修改配置文件,那么就不用每个页面都写session_start(),但是修改配置文件的方式会导致session不能存储对象。所以不建议使用配置文件的方式自动开启session。(https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=2169381799,1320776160&fm=173&app=49&f=JPEG?w=450&h=300&s=440A5532435E4DC80AD4B1DB0000C0B2

 清空session超全局数组中的值

如果想把某个用户在Session中注册的所有变量都删除,可以直接将数组变量$_session赋上一个空数组:

$_SESSION=array();                //将Session中变量全部清除

注意:使用"$_SESSION=array()" 清空$_SESSION数组,不会释放session_id。而使用session_destroy()时,则是将这个用户在服务器端对应的Session文件删除,同时释放session_id,但内存中的$_SESSION变量内容依然保留。

谈一谈session_unset()和session_destroy()以及unset()的区别

创建a.php ,b.php ,c.php三个文件测试区别。在php.ini配置文件中找到session文件保存的路径。刚开始是没有session文件的,如图:

开启session会话,往$_SESSION数组中写入值。可以看到创建了session文件,并且打印输出$_SESSION如图:

首先使用session_unset(),他只是清空了$_SESSION数组中的值,但是不会删除session文件,不会释放session_id; $_SESSION变量也存在(个人认为和清空数组一样的效果)。结果如图

    ----------->>>>>> session文件还存在

接下来是session_destroy(),会将文件删除,释放session_id。但是不会删除内存中的变量。结果如图:

文件也不存在了,如下图:

注意提示的错误信息,仍然是未定义的索引。   接下来是unset()。重新开启session,unset()删除$_SESSION。结果如图:

能够发现unset把内存中的变量$_SESSION删除了,但是文件仍然存在(这里不截图了),session_id也存在 。(值得注意的是,unset在c.php中删除变量的话,在b.php中打印$_SESSION仍然存在值)

下面是测试代码:

//a.php  文件代码

<?php
session_start();
$_SESSION['name'] = 'name';
$_SESSION['age'] = 20; //b.php <?php session_start();
// session_unset();
echo $_SESSION['name'];
echo '<br>';
// $_SESSION = [];
// print_r($_SESSION);
// session_destroy();
echo session_id();
// session_unset();
// unset($_SESSION); //c.php
<?php
session_start();
unset($_SESSION);
// session_unset();
var_dump($_SESSION);
echo '<br>';
echo $_SESSION['age'];
echo '<br>';
echo session_id();

引用 “Aileen0509”  的回答中一段话,原文点这里

session_destroy() ,手册中明确的说道:destroys all of the data associated with the current session. It does not unset any of the global variables associated with the session, or unset the session cookie. To use the session variables again, session_start() has to be called.
不会删除 session 的全局变量和 session相关cookie,只是结束了这次会话。作为一个普普通通的全局变量,如果我们不需要了的话,就将他 unset() 掉。如果想再次开启会话,就需要再一次session_start(),但是session_start() 重新建立会话,会重新初始化$_SESSION数组,session_start()之后$_SESSION 就又是一个空数组了。

http协议。会话控制cookie、session的更多相关文章

  1. php会话控制cookie/session

    设置cookie PHP设置Cookie最常用的方法就是使用setcookie函数,setcookie具有7个可选参数,我们常用到的为前5个: name( Cookie名)可以通过$_COOKIE[' ...

  2. java ->会话技术Cookie&Session

    会话技术Cookie&Session 会话技术简介 存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户 ...

  3. 会话控制:session与cookie

    我们在浏览网站时,访问的每一个web页面都需要使用"http协议"实现.而HTTP协议是无状态协议,就是说HTTP协议没有一个内建机制来维护两个事务之间的状态.当一个用户请求一个页 ...

  4. 会话控制:Cookie和session

    HTTP(超文本传输协议)定义了通过万维网(WWW)传输文本.图形.视频和所有其他数据所有的规则.HTTP是一种无状态的协议,说明每次请求的处理都与之前或之后的请求无关.虽然这种简化实现对于HTTP的 ...

  5. 会话控制cookie和session

    Cookie Cookie简介 HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出.这样的设计严重阻碍的Web程序的设计.如:在我们进行网购时, ...

  6. 会话控制——Cookie和Session

    Cookie简介 l  HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出.这样的设计严重阻碍的Web程序的设计.如:在我们进行网购时,买了一条 ...

  7. php 会话控制(Session会话控制)

    php的session会话是通过唯一的会话ID来驱动的,会话ID是一个加密的随机数字,由php生成,在会话的生命周期中都会保存在客户端.客户端保存数据的地方只有cookie,所以php的会话ID一般保 ...

  8. JavaEE之会话技术Cookie&Session

    会话技术简介 存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪         里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并 ...

  9. Web核心之会话技术Cookie&Session

    什么是会话技术? http协议是无状态协议.为了满足在多次请求之间数据进行交互,推出了会话技术. 会话概念:一次会话,指的是从客户端和服务器建立起连接开始,到客户端或服务器断开连接为止.中间可能进行多 ...

随机推荐

  1. Lucene 全文检索

    基于 lucene 8 1 Lucene简介 Lucene是apache下的一个开源的全文检索引擎工具包. 1.1 全文检索(Full-text Search) 全文检索就是先分词创建索引,再执行搜索 ...

  2. 【AtCoder】ARC064

    ARC064 C - Boxes and Candies 先把每个盒子都消到x 然后从前往后推,要求第二个的上界是x-前一个 因为我们要求靠后的那个尽量小,会对后面的修改影响尽量小 #include ...

  3. 【AtCoder】ARC060

    ARC060 C - 高橋君とカード / Tak and Cards 每个数减去A,然后转移N次,每次选或不选,最后是和为0的时候的方案数,负数可以通过把所有数右移2500做到 #include &l ...

  4. idea配置glassFish启动项目

    将项目打成war包形式. 然后配置glassFish +号配置启动包 此处配置启动路径 ........ 路径也可以在localhost:4848 --->中的Applicaton中去配置

  5. cdoj 574 High-level ancients dfs序+线段树 每个点所加权值不同

    High-level ancients Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/s ...

  6. 常用bat文件

    rmLog.bat @echo offpause >nul | echo 按任意键继续3pause >nul | echo 按任意键继续2pause >nul | echo 按任意键 ...

  7. instanceof关键字 与 getClass()

    在equals()中使用getClass进行类型判断 我们在覆写equals()方法时,一般都是推荐使用getClass来进行类型判断,不是使用instanceof.我们都清楚instanceof的作 ...

  8. js 超浓缩 双向绑定

    绑定确实是个有趣的话题. 现在我的绑定器有了不少的功能 1. 附着在Object对象上,一切以对象为中心 2. 与页面元素进行双向绑定 3. 与任意对象绑定,主要是应用在绑定到页面元素的一些属性上,比 ...

  9. Pycharm+Selenium webdriverPython自动化测试

    这是关于软件测试的一个作业! 1.Pycharm下载,这里可以自己去官网下载即可:https://www.jetbrains.com/pycharm/download/#section=windows ...

  10. TypeScript入门六:TypeScript的泛型

    泛型函数 泛型类 一.泛型函数 在泛型函数之前,先简单的描述一下泛型,将变量定义成泛型可以在使用变量时来决定它的类型.什么意思呢?假如现在有一个函数,可能出现参数和返回值出现多种情况的现象,只有在调用 ...