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这种缓存里面,这种一种比较通用的做法,性能好,易扩展.

原文地址:https://www.cnblogs.com/maxomnis/p/5515547.html