MEMCACHE共享SESSION

发布于:2014-1-10 11:42 作者:admin 浏览:2119 分类:系统架构
1. 实验环境(2个机器)
192.168.1.10(Memcached服务器)
192.168.1.20(WEB服务器)
2.配置Memcached服务器(192.168.1.10)
安装: yum install memcached
开启: memcached -d -m 32 -p 11211 -u root (开启11211端口提供服务,32M缓存,最好不要带-l 如 -l 127.0.0.1,否则会导致远程服务器连接不上)
3.在WEB机器上编写测试程序(192.168.1.20. 注意:一定要安装memcache扩展)
<?php
header("Content-type:text/html; charset=utf-8");
echo "<pre>";
$mamcache_server_ip='192.168.1.10';
$mamcache_server_port='11211';

//设置MemcacheSession共享
ini_set("session.save_handler","memcache");
ini_set("session.save_path","tcp://$mamcache_server_ip:$mamcache_server_port");
session_start();


//session赋值
$session_id=session_id();
var_dump("session_id=".$session_id);


$action=$_GET['action'];
switch($action)
{
	
	
	//清除$_SESSION['mem_session']
	case 'clear':
	unset($_SESSION['mem_session']);
	var_dump($_SESSION['mem_session']);
	//session_destroy();
	break;
	
	//存储SESSION
	case 'set':
	$_SESSION['mem_session']='测试SESSION='.date("Y-m-d H:i:s"); 
	var_dump($_SESSION['mem_session']);
	break;
	
	//获取SESSION
	case 'get':
	var_dump($_SESSION['mem_session']);
	break;
	
	
	//查看Memcahce如何存储的SESSION
	case 'mem':
	//从MEMCACHE读取SESSION的值。
	$memcache = new Memcache;
	$memcache->connect($mamcache_server_ip,$mamcache_server_port) or die ("连接服务器失败");
	
	//key 来源 session_id();
	$result = $memcache->get($session_id);
	var_dump("结果=".$result);
	break;
}

echo "</pre>";
?>
4. 测试结果如下:
4.1. http://localhost/session.php?action=clear
string(37) "session_id=o8lb038n05c6e185d0c882kp84"
NULL
4.2. http://localhost/session.php?action=set
string(37) "session_id=o8lb038n05c6e185d0c882kp84"
string(33) "测试SESSION=2014-01-10 05:32:46"


4.3.http://localhost/session.php?action=get
string(37) "session_id=o8lb038n05c6e185d0c882kp84"
string(33) "测试SESSION=2014-01-10 05:32:46"



4.4.http://localhost/session.php?action=mem


string(37) "session_id=o8lb038n05c6e185d0c882kp84"
string(60) "结果=mem_session|s:33:"测试SESSION=2014-01-10 05:32:46";"

标签: session memcache

0

设置session用memcache来存储

发布于:2014-1-9 16:42 作者:admin 浏览:1667 分类:系统架构
设置session用memcache来存储 

方法I: 在 php.ini 中全局设置 
Php.ini代码  
  1. session.save_handler = memcache  
  2. session.save_path = "tcp://127.0.0.1:11211"  


方法II: 某个目录下的 .htaccess 
 
  1. php_value session.save_handler "memcache"  
  2. php_value session.save_path  "tcp://127.0.0.1:11211"  


方法III: 再或者在某个一个应用中 
Php代码  
  1. ini_set("session.save_handler""memcache");  
  2. ini_set("session.save_path""tcp://127.0.0.1:11211");  


使用多个 memcached server 时用逗号","隔开,并且和 Memcache::addServer() 文档中说明的一样,可以带额外的参数"persistent"、"weight"、"timeout"、"retry_interval" 等等,类似这样的:"tcp://host1:port1?persistent=1&weight=2,tcp://host2:port2" 。 

如果安装的PECL是memcached(依赖libmemcached库的那个扩展),则配置应为 
Php代码  
  1. ini_set("session.save_handler""memcached"); // 是memcached不是memcache  
  2. ini_set("session.save_path""127.0.0.1:11211"); // 不要tcp:[/b]  


代码例子(不依赖libmemcached库的那个) 
Php代码  
  1. <?php  
  2. session_start();  
  3. if (!isset($_SESSION['TEST'])) {  
  4.     $_SESSION['TEST'] = time();  
  5. }  
  6.    
  7. $_SESSION['TEST3'] = time();  
  8.    
  9. print $_SESSION['TEST'];  
  10. print "<br><br>";  
  11. print $_SESSION['TEST3'];  
  12. print "<br><br>";  
  13. print session_id();  
  14. ?>  


用 sessionid 去 memcached 里查询一下: 
Php代码  
  1. <?php  
  2. $memcache = memcache_connect('localhost', 11211);  
  3. var_dump($memcache->get('19216821213c65cedec65b0883238c278eeb573e077'));  
  4. ?>  

 

 

标签: session memcache

0

php memcache集群中的session

发布于:2014-1-9 8:56 作者:admin 浏览:2819 分类:系统架构

传统的session是以文件形式存储于服务器端的,但是当处于集群环境时,客户端访问的可能是任意服务器中的一台,也就是说不一定此时session文件就存在于此台服务器上,自然也就访问不到session了。

过去的解决办法一般是通过数据库来存储session的方式来解决,这样就可以实现跨服务器的session共享了,但与之而来的问题就是对数据库频繁访问所造成的问题了。

所以我们要用memcache来解决这个问题!

1.首先安装memcache,以及memcache在php中的扩展

2.修改php.ini文件

session.save_handler = memcache
session.save_path = “tcp://127.0.0.1:11211″

或者memcached

session.save_handler = memcached

session.save_path = "127.0.0.1:11211"


或者在php代码里面实现

ini_set('session.save_handler', 'memcache');
ini_set('session.save_path', 'tcp://192.168.0.1:10001?persistent=1&weight=1&timeout=1&retry_interval=15,tcp://192.168.0.2:10002?persistent=1&weight=1&timeout=1&retry_interval=15');

session_start();

使用多个 memcached server 时用逗号”,”隔开,并且和 Memcache::addServer() 文档中说明的一样,可以带额外的参数”persistent”、”weight”、”timeout”、”retry_interval” 等等,类似这样的:”tcp://host1:port1?persistent=1&weight=2,tcp://host2:port2″ 。

3.大功告成,重启apache和memcache看看phpinfo里的session配置是不是变成了memcache了。


memcache 集群不用怎么设置直接用:

  addServer($ip,$port);
  addServer($ip,$port);

  addServer($ip,$port);


memcached 集群不用怎么设置直接用:

  $m = new Memcached();
  $servers = array(
      array(
'mem1.domain.com'1121133),
      array(
'mem2.domain.com'1121167)
  );
  $m->addServers($servers);


demo 页面一

<?php

session_start();


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

$_SESSION['TEST2'] = 'test2';


echo session_id();


$mem = new Memcache();

$mem->addServer('127.0.0.1',11211);

$mem->addServer('localhost',11211);


echo '<hr>';

print_r($mem->get(session_id()));

?>


<a href="./memcache-session2.php" target="_balnk">页面2</a>


demo 页面二

<?php

session_start();

print_r($_SESSION);


结果:正确


注:memcached 方式

ini_set("session.save_handler", "memcached"); // 是memcached不是memcache

ini_set("session.save_path", "127.0.0.1:11211"); // 不要tcp:

 

 

 

 

1.在session的存储服务器上安装 redis 

2,修改php.ini配置

 
  1. session.save_handler = redis  
  2. session.save_path = "tcp://127.0.0.1:6379"  

3,查看redis的php扩展

 

四,session存储到redis中测试

 
  1. <?php  
  2. session_start();  
  3. $_SESSION['redis'] = "aaaaaa";  
  4. echo session_id();  
  5. echo "<br>";  
  6. echo $_SESSION['redis'];  
  7. echo "<br>";  
  8. $redis = new redis();  
  9. $redis->connect('127.0.0.1', 6379);  
  10. echo $redis->get("PHPREDIS_SESSION:".session_id()); 
  11. ?>  
 

标签: session memcache

0