session的本质:
http协议是无状态的,即你连续访问某个网页100次和访问1次对服务器来说是没有区别对待的,因为它记不住你。
因此,在某些为了让服务器记住或者认识你的情况下,该怎么办呢?为了解决这个问题,session就诞生了。
session共享:
为什么要session共享呢?如果你的网站是存放在一个机器上,那么是不存在这个问题的,因为会话数据就在这台机器,用户每次请求的都是这台机器,但是,当需要使用负载均衡把请求分发到不同的服务器时,这个时候会话ID在客户端是没有问题的,但是如果用户的两次请求分别到了不同的两台服务器,而session只存在在一台服务器上,这个时候,可能会出现抓取不到session数据的情况,因此,就需要进行session的共享,用不同的服务器抓取到相同的session数据。
session共享的方式:
session默认是以文件形式存储的,在php的配置文件中的session.save_handler(默认存储方式,默认为files)和session.save_path(默认存储路径)进行配置。
session共享图示:
session共享有很多方式,session入库就是其中一种,session入库一般可以入mysql数据库,缓存数据库memcache、redis。这里用memcache实现session共享。
memcache实现session共享:
<?php
//设置session存储的方式
ini_set('session.save_handler','memcache');
//设置session存储的位置
ini_set('session.save_path','tcp://127.0.0.1:11211');
//开启session
session_start();
//写入session值
$_SESSION['name']='test';
//输出sessionid
echo session_id();
此时,要获取session值就可以根据sessionid从memcache获取
<?php
//根据sessionid获取session
$mem=new Memcache();
$mem->connect('127.0.0.1',11211);
$data=$mem->get($sessionid);
注意:
需要先设置好session的存储方式和存储位置,再开启session进行写入session。
一个memcache的并发性能也是有限的,如果需要更好的性能,可以采用多个memcache使用分布式memcache。