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协议是无状态协议.为了满足在多次请求之间数据进行交互,推出了会话技术. 会话概念:一次会话,指的是从客户端和服务器建立起连接开始,到客户端或服务器断开连接为止.中间可能进行多 ...
随机推荐
- 更改oracle RAC public ip,vip,scan ip和private ip
更改oracle RAC public ip,vip,scan ip和private ip oifcfg - Oracle 接口配置工具 用法: oifcfg iflist [-p [-n]] ...
- elasticsearch进行远程访问,所面对的问题解决方案
elasticsearch6.2进行远程访问,修改yml文件后,启动会报错: 上面四个问题解决方案如下: 问题1,问题2,问题3,解决如下: 注意: 针对第二个问题,你可能在limits.d目录中没有 ...
- TypeScript的类型
⒈TypeScript的类型 JavaScript语言的数据类型包括以下7种: 1.boolean(布尔),true || false 2.null,表明null值得特殊关键字,JavaScript是 ...
- (二十八)动态盐的MD5加密算法(java实现)
目录 文章目录 @[toc] 源代码: 函数用法讲解: 用法代码实例: 对比普通 **`MD5`** 的优点 实现思路: 后来我发现,BCryptPasswordEncoder 是这个思路的实现的最优 ...
- LeetCode. 计数质数
题目要求: 统计所有小于非负整数 n 的质数的数量. 示例i: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 . 代码: class Soluti ...
- php实现算法
二分法查找(已排序) @params $arr 查找的数组 $start 开始查找的下标 $end 结束查找的下标 $value 查找的值 function bin_search($arr,$ ...
- 记一次邮件推送的坑,c#基于smtp使用腾讯企业邮箱发送邮件总是失败的原因
今天在弄企业邮箱推送的东西,原版代码是这样的 public void SendEmail(string title, string content) { try { MailMessage mailM ...
- nexus 绑定负载均衡nginx反向代理后 遇到的https问题。
1.今天搭建maven私服,下载安装好nexus运行后,通过IP可以直接访问,没有问题,如:http://123.123.123.123:8081 就可以进入主页面.没有任何问题. 2.但是他默认是h ...
- ORCALE字符集AL32UTF8和ZHS16GBK的互相转换
AL32UTF8转成ZHS16GBK cmd中输入“SQLPLUS”,回车,然后再在用户名下输入“SYS AS SYSDBA”,回车 密码后面输入“SYS”,回车.这里输入密码是隐式的,所以看不见,只 ...
- centeros7安装mysql
转载自:https://www.linuxidc.com/Linux/2016-09/135288.htm 安装之前先安装基本环境:yum install -y perl perl-Module-Bu ...