session,cookie总结
不同的域名生成的session_id是不一样的,(就算是相同的主域,例如:www.test.com, blog.test.com 都不一样);
相同的主域,不同的二级域名,例如www和blog都是不共享cookie的,要如何共享呢?
setcookie("age", "1000000000", time()+3600,'/','test.com'); //这里指定主域的地址,这样,其二级域名就都可以访问这个cookie了。
那么二级域名之间是如何共享session的呢?
session的读取是根据session_id来从session的存储位置来读取的,那么如果在www和test之间能传递session_id那不就是可以共享session了?
比如在www目录下面有index.php 的代码
<?php
session_start();
setcookie("age", "1000000000", time()+3600,'/','test.com');
$session_id = session_id();
setcookie("PHPSESSID", $session_id, time()+3600,'/','maxomnis.com'); //这里的PHPSESSID为session_id默认的存储的名字,如果php.ini修改了这里也要修改;
那么在blog目录下面的index.php如下的代码, 就可以去取到上面的age值了
<?php
session_start();
var_dump($_COOKIE);
不过首先上面的情况是www,blog都是在同一台服务器上,因为都是共用的同一台服务器,并且是同一个php-fpm所以能访问同一个路径下存储的session文件;
那如果www.test.com, blog.test.com两个是不同的服务器,那怎么共享session呢?
1.session都存在数据库里面,两个应用都访问同一个数据库,那么这样就可以解决共享的问题了, disucz, phpcms都是用的这种做法, 这种做法的弊端是,如果PV比较高的情况,会有性能的问题,因为每次session访问都要操作数据库。
2.session存储在redis,memcache这种缓存里面,这种一种比较通用的做法,性能好,易扩展.