先考虑如下问题:
禁用了cookie,session能否使用?
如何把session存储数据库/memcached/redis
如何实现一个严格的30分钟过期的会话?、
如何实践web服务器集群的会话共享?
如何实现两个不同域站点的会话共享?
答: 能!
cookie和session的关系
cookie传递session_id,供服务器决定session文件.
所以只要能向服务器传递session_id,session就能正常使用.
而cookie只是传递session_id的一种方式而已.
用url也能传递session_id
php.ini 配置如下:
session.use_only_cookies = 0
session.use_trans_sid = 1
OK了.
实现代码:
class sess {
protected static $mem = null; public static function open() {
if(self::$mem === null) {
self::$mem = new memcache();
self::$mem->connect('localhost' , 11211);
}
} public static function close() {
self::$mem->close();
} public static function read($id) {
return self::$mem->get($id);
} public static function write($id , $data) {
return self::$mem->add($id,$data , false);
} public static function destroy($id) {
return self::$mem->delete($id);
} public static function gc($lifetime) {
//
}
} session_set_save_handler('sess::open', 'sess::close', 'sess::read', 'sess::write', 'sess::destroy', 'sess::gc');