java和php能共享的session(通过memcache)
用普通的memcache重写session 实际上是为了让session用json格式保存,好用java读取..
java只需要修改它的session程序,就可以做到java php session通用(相互无缝调取)了
不过要注意$id就是session_id是在php.ini中设置name 要和java统一。。否则还是没戏
include ‘include/_Memcache.class.php’;
/**
* 打开。。没用
* @author test
* @param $save_path
* @param $session_name
* @return unknown_type
*/
function open($save_path, $session_name) {
return(true);
}
/**
* 关闭。。没用
* @author test
* @return unknown_type
*/
function close() {
return(true);
}
/**
* 统一使用make key的方法获取存取主键
* @author test
* @param $id
* @return unknown_type
*/
function makeKey($id) {
return “sysSession/sess_$id”;
}
/**
* 读取,直接设置了$_SESSION,不知道会有什么问题吗。。。。
* @author test
* @param $id
* @return unknown_type
*/
function read($id){
$GLOBALS[sessionDataStore] = json_decode($GLOBALS[memCache]->getValue(makeKey($id)),true);
$_SESSION= $GLOBALS[sessionDataStore];
return $_SESSION;
}
/**
* 写入session,也是直接将$_SESSION写入memcache,并没有用系统自带的session_encode
* @author test
* @param $id
* @return unknown_type
*/
function write($id, $sess_data){
//如果session从未被修改过,那么就真的不用再调用memcache进行写入了!(这里的确节省了不少~~)
if(serialize ($GLOBALS[sessionDataStore]) == serialize ($_SESSION)) {
return true; //用这种模式session的存活时间一定要长,否则就不行了。。
}
return $GLOBALS[memCache]->setValue(makeKey($id),json_encode($_SESSION),24*3600); //24个小时过期,好在memcache的空间大,存个session还是有富余的~~
}
/**
* 销毁session
* @author test
* @param $id
* @return unknown_type
*/
function destroy($id){
return $GLOBALS[memCache]->delete(makeKey($id));
}
/**
* 过期 没用
* @author test
* @param $maxlifetime
* @return unknown_type
*/
function gc($maxlifetime) {
return true;
}
session_set_save_handler(“open”, “close”, “read”, “write”, “destroy”, “gc”);
register_shutdown_function (‘session_write_close’); //一定要这样,否则write这个函数里面不能用类!因为session调用write函数的时候,类已经释放了。
session_start();