这几天在实现nginx集群的过程中,发现session使用存在问题,登录页面后有时候需要重复登录,和开发部沟通后,决定采用memcached来实现session的共享,这也是各大型网站推荐的方式。

开发部开始写了一些用memcache来保存session的代码后,测试效果不是很理想,还是存在问题,后来在一个blog上发现可以直接在php.ini中设定使用memcache作为session处理,而且无须另外编码,大大较少了开发成本,方法是:

修改php.ini中的以下值
session.save_handler = memcache
session.save_path = 'tcp://192.168.100.100:12000' 

重新启动apache,查看phpinfo就知道设置是否生效。

如果只想在特定的应用里使用memcache储存session,可以使用ini_set的方法对以上两个参数进行设定:
ini_set("session.save_handler", "memcache");
ini_set("session.save_path", "192.168.100.100:12000");

注:使用多个 memcached server 时用逗号”,”隔开,可以带额外的参数”persistent”、”weight”、”timeout”、”retry_interval” 等等,

类似这样的:"tcp://host:port?persistent=1&weight=2,tcp://host2:port2"。

要测试一下是否真正用上了memcache,可以先捕足到使用的PHPSESSID,再作为KEY用memcach去读一下,就清楚了,测试代码如下:

创建一个set_session.php代码:

//set_session.php
session_start();
if (!isset($_SESSION['admin'])) {
$_SESSION['TEST'] = 'chentao';
}
print $_SESSION['admin'];
print "\n";
print session_id();
?>

创建一个get_session.php代码:

//get_session.php
$mem = new Memcache;
$mem->connect("192.168.100.100", 12000);
var_dump($mem->get('9a971ff6b459d59950035e9aa5dbf88f'));
?>

在命令行,或者页面都可以执行,如果输出结果为:
string(16) "admin|s:3:"chentao";"
就证明 session 正常工作。

在生产环境里,你也可以查看调度服务器的访问日志,同一IP地址前后访问的服务器不一样,仍然可以共享session,比如我的nginx调度日志如下:

[root@localhost conf]# tail /var/log/nginx/test_access_log | awk {'print $1,$6,$7'} | sort
192.168.8.236 192.168.1.4:8080 200
192.168.8.236 192.168.1.9:8080 200
192.168.8.239 192.168.1.9:8080 200
192.168.8.239 192.168.1.9:8080 200
192.168.8.239 192.168.1.9:8080 200
192.168.8.26 192.168.1.4:8080 200
192.168.8.26 192.168.1.4:8080 200
192.168.8.26 192.168.1.4:8080 200
192.168.8.26 192.168.1.9:8080 200

http://blog.chinaunix.net/uid-10449864-id-2956918.html

最新文章

  1. 翻唱曲练习:龙珠改主题曲 【Dragon Soul】龙之魂
  2. 匹夫细说C#:可以为null的值类型,详解可空值类型
  3. Validform 学习笔记---代码练习
  4. offset/client/scroll一些总结
  5. OProfile 性能分析工具
  6. iCheck表单美化插件使用方法详解(含参数、事件等)
  7. 一起啃PRML - 1.1 Example: Polynomial Curve Fitting 多项式曲线拟合
  8. 大文件遍历shell脚本
  9. java web(jsp)-The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
  10. centos7 install jdk
  11. ztree学习笔记(一)
  12. SVG裁切和蒙版
  13. 保存图片到SD卡
  14. 使用ReentrantLock同步,经典银行账户问题
  15. Python学习第六课
  16. java实现带空格字符串的倒序输出
  17. windows10开启wst子系统
  18. 洗礼灵魂,修炼python(56)--爬虫篇—知识补充—编码之url编码
  19. LY.JAVA面向对象编程.内存图
  20. Linux下安装中文宋体

热门文章

  1. hdu Random Sequence
  2. react-native 学习
  3. mac mysql环境配置
  4. [转]Efficiently Paging Through Large Amounts of Data
  5. WinEdt选项卡配置
  6. 字符编解码的故事(ASCII,ANSI,Unicode,Utf-8区别)
  7. 《GK101任意波发生器》升级固件发布(版本:1.0.2build955)
  8. 前端网址收集!Amazing! 神奇!
  9. Sql Group by 使用
  10. Oracle11g创建表空间语句