当前位置:首页 > PHP > 正文内容

全方位认识PHP的SESSION

高老师7年前 (2019-03-25)PHP1407

【一】.介绍session

由于HTTP是无状态的请求,创建一个会话需要保持必须需要身份标识。当用户第一次访问,PHP会为用户创建一个唯一的sessionid,并将sessionid通过cookie发送给浏览器,并在服务器的临时文件创建一个以sessionid为名的文件用来保存这个sessionid保存的信息。

举例:

(1).访问我的网站http://www.gaojiufeng.cn,访问后发现本地的cookie有一个PHPSESSID=au63vsj6p5k35itclmbdufne66 ,服务器的cookies文件生成了一个sess_au63vsj6p5k35itclmbdufne66的文件

(2).当我再次访问我的网站,浏览器会自动携带cookie PHPSESSID=au63vsj6p5k35itclmbdufne66 来请求我的网站。

通过上面的例子,我们知道客户端的cookie中保存的sessionid和服务器的sessionid文件相关联,这样用户就能和系统交互,我们也知道用户的身份。这就是为什么PHP网站只需要拿到PHPSESSID=au63vsj6p5k35itclmbdufne66就能模拟登陆的原因了。

【二】.session只能保存字符串吗?

直接看代码:

$_SESSION['username'] = ['admin'];
$_SESSION['password'] = 'admin';

看来session是可以保存数组的,为什么呢?因为session文件保存的都是基于php序列化的内容,比如下面的cookies文件内容

username|a:1:{i:0;s:5:"admin";}password|s:5:"admin";

【三】.session只能保存在文件中吗?

session不仅仅只能保存到文件中,还能保存到redis或者mysql中,如果只能保存到文件中,那么负载均衡部署怎么办?

redis在php.ini的配置,也可以通过ini_set的php代码方式配置,一定要保证安装了redis扩展

session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"   
//session.save_path = "tcp://127.0.0.1:6379?auth=123456"  有密码的写法

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/79.html

分享给朋友:

“全方位认识PHP的SESSION” 的相关文章

xmlrpc  php,php通过xml-rpc进行通信

xmlrpc php,php通过xml-rpc进行通信

xmlrpc协议是通过http请求xml数据进行通信。webservice中和它相同的是soap。soap调用的确很简单,但是创建wsdl太繁琐,效率低下。xmlrpc很好的解决这个问题。(1).创建xmlrpc服务端(求和函数api)function getSum($method,$ar...

php异步信号处理

php异步信号处理

php7.1引入了PHP异步信号处理函数pcntl_async_signals() 来处理阻塞问题。在php7之前信号处理方式有2种,第一种是基于ticks来每执行一行代码来触发执行信号监听,第二种是直接while(true){  //监听信号 }第一种方式如果某行的代码阻塞时间较长会影响...

php代理下载,php代下载文件,php下载远程文件,php远程文件下载

php代理下载,php代下载文件,php下载远程文件,php远程文件下载

经常我们下载国外资源容易被墙,可以通过php脚本获取远程文件流然后输出给我们的浏览器来下载。<?php //设置下载文件的url $url = 'https://mirrors.huaweicloud.com/ubuntukylin/ubuntukylin-19....

PHP包含远程文件,PHP执行远程文件,PHP引入远程文件

PHP包含远程文件,PHP执行远程文件,PHP引入远程文件

(1).php.ini配置允许加载远程文件allow_url_fopen = On(2).创建本地文件invoke.php<?php require('https://blog.20230611.cn/test.txt');(3).创建远程文件https:/...

php redis队列

php redis队列

本篇文章是给新手学习php redis队列怎么玩的。我们模拟验证码发送,通过队列完成。(1).创建一个验证码发送接口/**  * 发送验证码  */ public function sendCaptcha() {    ...

php windows多进程,php windows创建多进程,

php windows多进程,php windows创建多进程,

本人在windows下创建多进程的研究,唯一缺点,主进程所在终端关闭则所有子进程全部关闭。原理是通过proc_open创建多进程,通过环境变量识别父子进程,还能通过proc_open进行父子进程通信<?php namespace EasyTask; use \Except...