php读取memcahed java session

PHP 共享 JAVA 保存的session信息

情景:

1:现在有两个系统,一个是Java做的系统,一个是PHP的系统,现在要把两个系统弄成一个单点登录。

2:两个系统两个库,两个库的表结构完全不同,现在要解决的就是session共享问题和用户信息的同步。

 

方法:::

1:java系统为主系统,php那边的登录,退出,注册都跳到java那边系统去登录。

2:java系统那边可以创建一个“session表“存的是每个用户对应session信息。php那边就要根据用户ID去‘session表’,存在取出相关信息,做登录。因为要维护两个库,所以php那边要查询自己库中是否存在这个用户,不存在需要添加。(没用这种方式,需要维护session的生命周期太麻烦)

3 **:创建”一个sesison表“对两边的系统都要付出比较大的代价,而且每次都要查数据库,session有效期维护那边程序也很复杂。所以借组于“memcache",tomat 于memcache整合(http://bbhaiidreamer.blog.51cto.com/3398980/841814)。这样的话,session信息就交memcache管理了。(项目采用这种方法)。

4:JAVA 与 PHP 是一、二级域名,可以实现cookie共享。这样在php那边通过得到session_id 到memcache里面去取用户的信息。由于java跟php的memcache存的格式不一样。java存的时xml格式的,所以php还要做一些处理,通过session_id,取到对应的xml,再解析xml里面的内容。完后再做登录操作。存在,直接登录,不存在,入库再登录操作。

 

java代码不用做什么处理,php这边的代码如下:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
function  qa_get_logged_in_user(){
  // Until you edit this function, nobody is ever logged in
  // echo "<script>alert('get_logged_in_user');</script>";
      
  //从cookie里面取JSESSIONID,如果存在,取出session值
   if ( $_COOKIE [ 'JSESSIONID' ]){
   //echo "<script>alert('COOKIE hava' );</script>";
   $session_id  $_COOKIE [ 'JSESSIONID' ];
   } else {
   echo  "<script>alert('COOKIE null ');</script>" ;
   }
     
  //连接memcachd,从memcache取用户信息
  $memcache  new  Memcache;     
  $memcache ->connect( '192.168.252.*' , 11211)  or  die  ( "Could not connect" );   
  $var  $memcache ->get( $session_id );
     
  //解析从memcached取出来的xml,取到用户相关属性
  $xml_parser  new  PageXml();
  $date_xml  $xml_parser ->del_xml( $var );
     
  if ( empty ( $date_xml )){ // 
    return  null;
  } else {
      
   $results  array ( $devName , $contact $email , $regTime , $devId );
   $devName  $date_xml [0];
   $contant  $date_xml [1];
   $email  $date_xml [2];
   $regTime  $date_xml [3];
   $devId  $date_xml [4];
     
  // get in session or cookie.
      
   $qa_db_connection =qa_db_connection();
   $sql  "SELECT userid,email,handle FROM t_users WHERE email='$email'" ;
   $result =mysql_fetch_assoc(mysql_query( $sql , $qa_db_connection ));
   //echo "<script>alert('get_logged_in_user-select user = $result');</script>";
         
   if  ( is_array ( $result )){
     return  array (
      'userid'  =>  $result [ 'userid' ],
      'publicusername'  =>  $result [ 'handle' ],
      'email'  =>  $result [ 'email' ],
      'level'  => ( $devName == 'admin' ) ? 1: 0
     );
   } else {
    $insert_result  = mysql_query( "INSERT INTO t_users (created, createip, email, passsalt, passcheck, level, handle, loggedin, loginip,flags) " .
    "VALUES (NOW(), 0, '$email', '' , '',0, '$contant', NOW(),0,1)" , $qa_db_connection );
    $d_id  = mysql_insert_id();  //返回插入的userId
    //echo "<script>alert('get_logged_in_user-insert user = $insert_result,userid=$d_id');</script>";
       
   return  array ( 'userid' =>  $d_id ,
              'publicusername'  =>  $contant ,
               'email'  =>  $email ,
    'level'  => ( $devName == 'admin' ) ? 1: 0);
  
     
     
  }
}
     
    
/*
*  解析xml类 2012-11-13
*/
class  PageXml {
  function  del_xml( $var ) {
      
  // echo $var;
   $first  strpos ( $var  , "xml" ); //字符第一次出现的位置
   //echo "fist = ".$first."<br>";
  $last  strrpos $var  , ">" ); //字符最后一次出现的位置
  // echo "last = ".$last;
  $resultXml  substr ( $var  , $first -2, $last ); //截取字符串,形式如:substr($string,0,-3);
      
  $dom  new  DOMDocument( '1.0' );
  $dom  ->loadXML( $resultXml );
  //获取具体的节点
  $messages  $dom ->getElementsByTagName( 'v' );   
     
  foreach  ( $messages  as  $book )   
  {
   $x_class  $book ->getAttribute( 'class' );  
   if ( $x_class  ==  'com.kkpush.account.domain.Developer' ){
      
     $devName  $book  ->getAttribute( 'devName' );
     $contact  $book  ->getAttribute( 'contact' );
     $email  $book  -> getAttribute( 'email' );
     $regTime  $book  -> getAttribute( 'regTime' );
     $devId  $book  -> getAttribute( 'devId' );
     $results  array ( $devName , $contact $email , $regTime , $devId );
    return  $results ;
   }
  }
      
   return  null;
  
}
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Memcache取出来的xml内容如下:
      
3K:�x�<:�{H01:�{Hb#C9437013AB69ED7F06BF3E634E78AC27-n1<? xml  version = "1.0"  encoding = "UTF-8"  ?>
< attributes  class = "java.util.concurrent.ConcurrentHashMap"  __id = "0"
  size = "3" >
  < k  class = "java.lang.String"  __id = "1"  value = "userName"  />
  < v  class = "java.lang.String"  __id = "2"  value = "kktalk"  />
  < k  class = "java.lang.String"  __id = "3"  value = "user"  />
<!-- 这里就是用户的信息,只要解析这个就好了 -->
  < v  class = "com.youar.account.domain.Developer"  __id = "4"  devId = "91"
   devName = "youa"  contact = "youra"  password = "youa"
   email = ""  QQ = "9999999"  regTime = "2012-11-13 09:56:22.0"
   lastUpdateTime = "2012-11-13 09:56:19.0"  isEnabled = "0"  isActivation = "0"
   activationCode = "fab9ef6e-9e2c-43e1-8ab5-1fb473a9aeed"
   isCustomDiscount = "0"  clickRate = "0.0"  showRate = "0.0"
   tempPasswordTime = "2012-01-01 20:20:20.0"  companyName = "ktlak"  />
  < k  class = "java.lang.String"  __id = "5"  value = "randCheckCode"  />
  < v  class = "java.lang.String"  __id = "6"  value = "7386"  />
</ attributes >

 

 

ps: 由于php系统比较特殊,用户表中只需要维护几个关键字段而已。在这里讲的是正对于我目前的系统,只供参考,具体问题具体分析。如有说错的地方,望指正。

转载于:https://www.cnblogs.com/zenghansen/p/3323946.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值