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 肖江
 * @param $save_path
 * @param $session_name
 * @return unknown_type
 */
function open($save_path, $session_name) {
  return(true);
}


/**
 * 关闭。。没用
 * @author 肖江
 * @return unknown_type
 */
function close() {
  return(true);
}
/**
 * 统一使用make key的方法获取存取主键
 * @author 肖江
 * @param $id
 * @return unknown_type
 */
function makeKey($id) {
      return “sysSession/sess_$id”; 
}
/**
 * 读取,直接设置了$_SESSION,不知道会有什么问题吗。。。。
 * @author 肖江
 * @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 肖江
 * @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 肖江
 * @param $id
 * @return unknown_type
 */
function destroy($id){
        return $GLOBALS['memCache']->delete(makeKey($id));
}
/**
 * 过期 没用
 * @author 肖江
 * @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();

  1. No comments yet.
(will not be published)

  1. No trackbacks yet.