http协议。会话控制cookie、session
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的更多相关文章
- php会话控制cookie/session
设置cookie PHP设置Cookie最常用的方法就是使用setcookie函数,setcookie具有7个可选参数,我们常用到的为前5个: name( Cookie名)可以通过$_COOKIE[' ...
- java ->会话技术Cookie&Session
会话技术Cookie&Session 会话技术简介 存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户 ...
- 会话控制:session与cookie
我们在浏览网站时,访问的每一个web页面都需要使用"http协议"实现.而HTTP协议是无状态协议,就是说HTTP协议没有一个内建机制来维护两个事务之间的状态.当一个用户请求一个页 ...
- 会话控制:Cookie和session
HTTP(超文本传输协议)定义了通过万维网(WWW)传输文本.图形.视频和所有其他数据所有的规则.HTTP是一种无状态的协议,说明每次请求的处理都与之前或之后的请求无关.虽然这种简化实现对于HTTP的 ...
- 会话控制cookie和session
Cookie Cookie简介 HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出.这样的设计严重阻碍的Web程序的设计.如:在我们进行网购时, ...
- 会话控制——Cookie和Session
Cookie简介 l HTTP是无状态协议,服务器不能记录浏览器的访问状态,也就是说服务器不能区分中两次请求是否由一个客户端发出.这样的设计严重阻碍的Web程序的设计.如:在我们进行网购时,买了一条 ...
- php 会话控制(Session会话控制)
php的session会话是通过唯一的会话ID来驱动的,会话ID是一个加密的随机数字,由php生成,在会话的生命周期中都会保存在客户端.客户端保存数据的地方只有cookie,所以php的会话ID一般保 ...
- JavaEE之会话技术Cookie&Session
会话技术简介 存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪 里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并 ...
- Web核心之会话技术Cookie&Session
什么是会话技术? http协议是无状态协议.为了满足在多次请求之间数据进行交互,推出了会话技术. 会话概念:一次会话,指的是从客户端和服务器建立起连接开始,到客户端或服务器断开连接为止.中间可能进行多 ...
随机推荐
- DB2创建EMP和DEPT并进行基础操作
一.DB2创建EMP和DEPT测试表 --DB2创建测试表 CREATE TABLE TEST.EMP (EMPNO INTEGER NOT NULL, ENAME ), JOB ), MGR INT ...
- 聊聊BIO、NIO与AIO的区别
题目:说一下BIO/AIO/NIO 有什么区别?及异步模式的用途和意义? 1F 说一说I/O首先来说一下什么是I/O? 在计算机系统中I/O就是输入(Input)和输出(Output)的意思,针对不同 ...
- SpingMVC使用小结
- Caesar's Legions(CodeForces-118D) 【DP】
题目链接:https://vjudge.net/problem/CodeForces-118D 题意:有n1名步兵和n2名骑兵,现在要将他们排成一列,并且最多连续k1名步兵站在一起,最多连续k2名骑兵 ...
- Let's Code
Let's Code Happy Coding, Happy OI #include <bits/stdc++.h> using namespace std; int main() { c ...
- 【KMP】Radio Transmission
问题 L: [KMP]Radio Transmission 题目描述 给你一个字符串,它是由某个字符串不断自我连接形成的.但是这个字符串是不确定的,现在只想知道它的最短长度是多少. 输入 第一行给出字 ...
- PowerShell 反弹渗透技巧
Windows PowerShell 是一种命令行外壳程序和脚本环境,使命令行用户和脚本编写者可以利用 .NET Framework的强大功能,并且与现有的WSH保持向后兼容,因此它的脚本程序不仅能访 ...
- HTTP API自动化测试
重构:发现测试的价值 回到起点,测试要解决什么问题,为什么要做API自动化测试平台?做这个平台,不是为了满足老板的提倡全民自动化的口号,也不是为了浮夸的KPI,更不是宣传自动化可以解决一切问题,发现所 ...
- 牛客 216D 消消乐 (二分图最小点覆盖)
大意: 给定棋盘, 每次消除一行或一列, 求最小次数使得消除完所有'*'. 裸的二分图最小点覆盖. 二分图的最小点覆盖等于最大匹配, 输出方案时从所有左部未盖点开始标记交替路上的点, 最后左部所有未标 ...
- 服务器上office不能正常使用?
(1)确保dll版本和服务器上office版本一致 (2)配置dcom (3)项目配置文件中添加用户模拟语句 <system.web> <identity impersonate=& ...