PHP + Memcache 实现Session共享

一.安装Memcache和PHP扩展

Windows下的Memcache安装

1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached

2. 在终端(也即cmd命令界面)下输入 'c:\memcached\memcached.exe -d install' 安装

3. 再输入: 'c:\memcached\memcached.exe -d start' 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动。这样服务器端已经安装完毕了。

4.下载php_memcache.dll,请自己查找对应的php版本的文件

5. 在C:\winnt\php.ini 加入一行 'extension=php_memcache.dll'

6.重新启动Apache,然后查看一下phpinfo,如果有memcache,那么就说明安装成功!

二.连接Memchache

1. 终端:telnet 127.0.0.1 11211

2. PHP:

; session.save_handler=files

session.save_handler=memcache

; session.save_path="E:\xampp\tmp"

session.save_path="tcp://127.0.0.1:11211"

相关的连接:

http://php.net/manual/zh/book.memcached.php

http://www.jb51.net/article/22065.htm

三.测试代码

<?php

session_start();

if (!isset($_SESSION['session_time'])) {

$_SESSION['session_time'] = time();

}

echo "session_time:".$_SESSION['session_time']."<br />";

echo "now_time:".time()."<br />";

echo "session_id:".session_id()."<br />";

?>

保存上面代码(注意替换域名和IP),分别放在两台服务器的web目录下,打开两个浏览器标签,先后访问两个地址,如果两个页面输出的session_time后的时间戳和session_id是一样的话就说明已经OK了。

需要注意的是,需要cookie保存session_id,有两种方法:

1.利用COOKIE存放session_id();

域名一文件php代码:

<?php
session_start();
setcookie("session_id",session_id(),time()+3600*24*365*10,"/",".session.com");
 $_SESSION['user_name'] = '梁山良民';
echo $_SESSION['user_name'];
?>
域名二文件php代码:
<?php
session_destroy(); 
session_id($_COOKIE['session_id']);
session_start();
echo $_SESSION['user_name'];
?>

2.利用php.ini 的session.cookie_domain

备注:这里是用php代码实现不需要修改php.ini的配置文件;如果有需要你可以在php.ini里面修改配置文件(该情况下就不需要改段代码:ini_set("session.cookie_domain",'session.com');)

域名一文件php代码:

<?php
ini_set("session.cookie_domain",'session.com');//注:该参数必须在sesson_start()之上,否则将不会生效
session_start();
$_SESSION['user_name'] = '梁山良民';
echo $_SESSION['user_name'];
?>

域名二文件php代码:

<?php
ini_set("session.cookie_domain",'session.com');
session_start();
echo $_SESSION['user_name'];
?>