php會話(session)實現原理
阿新 • • 發佈:2017-12-07
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)實現原理