其实关于php session存放redis和session共享,网上已经有非常多的例子,最近我们的项目刚好也要配置,那就记录一下流水账吧,别人的终究不是自己的,只有你真正实践过,才能算会吧,而且我写博客也是本着写笔记一样。不,我写博客就是在写笔记。
关于跨域问题,我有写过一篇文章的,简单的举个例子:www.buruyouni.com和api.buruyouni.com,都是buruyouni.com的域名,但是他们是跨域的,ajax请求需要允许跨域,session和cookie默认情况下也是分开存放的。
这次我们的目标是在www.buruyouni.com登录了的用户,访问api.buruyouni.com也是登录状态的。那么就更改下配置文件,让这两个域名的session存放位置和生成的session_id是一样的,就行了
1.我们把session存放位置改成redis存放,这里要注意,php要安装redis扩展,怎么安装的,先去查看你的php版本号是多少位的,然后到:http://pecl.php.net/package/redis 找到redis扩展。
Windows的用户直接解压到php的etc目录下,在php.ini文件增加extension=php_redis.dll,
linux下载目前最新版本: wget http://pecl.php.net/get/redis-5.3.1.tgz
解压:tar -zxvf redis-5.3.1.tgz && cd redis-5.3.1
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
vim /usr/local/php/etc/php.ini
增加:extension=redis.so
ps -ef|grep php
平滑重启php: kill -USR2 端口号,查看phpinfo
Redis扩展安装好后,然后配置php.ini文件:
方法1改php.ini文件:
session.save_path="tcp://127.0.0.1:6379"
session.save_handler = redis
session.cookie_domain = "buruyouni.com"
方法2,在php文件里面改ini:
<?php
//如果是已存在session_id先清除浏览器缓存
ini_set('session.cookie_domain', 'yaf.com');//跨域,必须在session start之前
//安装了redis扩展,就存放session到redis
if(class_exists("redis", false)){
ini_set("session.save_handler", "redis");
ini_set("session.gc_maxlifetime", 3600);
ini_set("session.save_path", "tcp://127.0.0.1:6379");
}
session_start();
$a = $_SESSION["name"];
$b = $_SESSION["cat"];
$c = $_SESSION["sessionid"];
echo $a."<hr>";
echo $b."<hr>";
echo $c."<hr>";
echo session_id()."<hr>";
phpinfo();
exit();
$_SESSION["name"] = "coco is a dog";
$_SESSION["cat"] = "cat is a cat";
$_SESSION['sessionid'] = 'this is session content!'.date("Y-m-d H:i:s");
echo $_SESSION['sessionid'];
echo '<br/>';
echo session_id();
phpinfo();
exit();