1. 程式人生 > >php會話(session)實現原理

php會話(session)實現原理

tro 兩個 open() php.ini clas too span etime handle

先考慮如下問題:

禁用了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‘);

php會話(session)實現原理