Ubuntu下实现Memcache共享session
1。安装memcached,Ubuntu懒人方式当然首选 apt-get。apache php5 安装我就不多说了。
apt-get install memcached php5-memcache
安装完Memcache服务端以后,我们需要启动该服务:
memcached -d -m 128 -p 11211 -u root
将etc/memcached.conf 中的 127.0.0.1 改成 服务器地址我这里是 192.168.1.105.可以给memcache 单建一个用户去跑服务,默认是nobody,我就不去建了。
将/etc/php5/apache2/conf.d/memcache.ini 里的 extension=memcache.so 前注释去掉。然后重启动apache2 查看 phpinfo 中的 "Registered save handlers" 会有 "files user memcache" 这3个可用。
2。然后修改 /etc/php5/apache2/php.ini
session.save_handler = memcache
session.save_path = “udp://192.168.0.100:11211,tcp://192.168.0.101:11211″ //多台服务器共享
使用多个 memcached server 时用逗号","隔开
也可以在 .htaccess :
php_value session.save_handler "memcache"
php_value session.save_path "tcp://192.168.1.100:11211"
再或者在某个一个应用中:
ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "tcp://192.168.1.100:11211");
我们需要在php.ini里进行简单的配置,打开/etc/php5/apache2/php.ini文件在末尾添加如下内容:
修改php.ini 中 extension_dir 的值为/usr/lib/php5/20090626+lfs/ ,重新执行 php -m 可以看到warning不存在了,同时下边也会列出 memcache 模块已经安装
3.启动memcached /etc/init.d/memcached start
4.重启apache /etc/init.d/apache2 restart
在分布式多台服务器部署apache后,将下面测试代码分别放到每台服务器中:
login.php //登陆页面
<?php
session_start();
$_SESSION['name']='mym';
$_SESSION['pwd']='123456';
$session_id=session_id();
echo "sid:".$session_id."<br>";
echo '<br><a href="./read.php">read session</a>';
?>
read.php
<?php
session_start();
$session_id=session_id();
echo "sid:".$session_id."<br>";
echo 'sever:192.168.1.100<br>'; //在另一台服务器中将ip改为对应的192.168.1.101
echo 'name:'.$_SESSION['name']."<br>";
echo 'pwd:'.$_SESSION['pwd']."<br>";
?>
在前端服务器由ngnix反向代理访问:login.php后,再点击read.php页面,我们可以看到循环的切换后端服务器的ip,并且读出相应的session值。