您当前的位置:首页 > 分类 > 技术资讯 > Memcache > 正文

java和php能共享的session(通过memcache)

发布时间:2013-10-09 14:14:36      来源:51推一把
【摘要】用普通的memcache重写session 实际上是为了让session用json格式保存,好用java读取.. java只需要修改它的session程序,就可以做到java php session通用(相互无缝调取)了 不过要注意$id就是session_id是在php.ini中设置name 要和java统一。。否则还是没戏&nb

用普通的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();