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系统比较特殊,用户表中只需要维护几个关键字段而已。在这里讲的是正对于我目前的系统,只供参考,具体问题具体分析。如有说错的地方,望指正。
php读取memcahed java session的更多相关文章
- Java Session 会话技术
什么是Java Session? 大图:http://images2017.cnblogs.com/blog/1030087/201712/1030087-20171223235950881-1310 ...
- java 读取txt,java读取大文件
java 读取txt,java读取大文件 package com.bbcmart.util; import java.io.File;import java.io.RandomAccessFile;i ...
- java session 详解
原网址:http://blog.sina.com.cn/s/blog_670b6d880101deff.html 一.术语session 在我的经验里,session这个词被滥用的程度大概仅次于tra ...
- Java Session 介绍;
为什么需要Session 这是为了填补 Http 协议的局限,当用户去访问一个页面,服务端返回完了请求(如,你访问完一个网页,这个页面将页面内容,界面UI呈现给你),就算是结束了,就断开了,服务端不再 ...
- 学习记录 java session保存用户登录
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- 依据不同的操作系统读取配置文件/java读取属性文件代码
package cn.com.css.common.util; /** * @brief OSEnum.java 操作系统的枚举 * @attention * @author 涂作权 * @d ...
- 关于JAVA SESSION的小测试
手生就要多练啊... package com.jeelearning.servlet; import java.io.IOException; import java.io.PrintWriter; ...
- java session cookie的使用
Cookie; Session; URL重写; cookie在J2EE项目中的使用,Java中把Cookie封装成了java.servlet.http.Cookie类.每个Cookie都是该Cooki ...
- (记录)Jedis存放对象和读取对象--Java序列化与反序列化
一.理论分析 在学习Redis中的Jedis这一部分的时候,要使用到Protostuff(Protobuf的Java客户端)这一序列化工具.一开始看到序列化这些字眼的时候,感觉到一头雾水.于是,参考了 ...
随机推荐
- Web service project中导入的库JAXB(JDK1.7新产品,组成部分)
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实例文档反向 ...
- PHP扩展开发
安装好php,进入安装目录. zbseoag@ubuntu:/usr/local/php-5.6.28/ext$ ./ext_skel --extname=mytest zbseoag@ubuntu: ...
- 建模算法(三)——非线性规划
一.非线性规划和线性规划不同之处 1.含有非线性的目标函数或者约束条件 2.如果最优解存在,线性规划只能存在可行域的边界上找到(一般还是在顶点处),而非线性规划的最优解可能存在于可行域的任意一点达到. ...
- Android异步加载图像(含线程池,缓存方法)
研究了android从网络上异步加载图像: (1)由于android UI更新支持单一线程原则,所以从网络上取数据并更新到界面上,为了不阻塞主线程首先可能会想到以下方法. 在主线程中new 一个Han ...
- Hark的数据结构与算法练习之煎饼排序
算法说明 假设煎锅里边有N个煎饼摞在了一起,它们大小不一并且顺序不一致,我们需要通过拿铲子将它们不停的翻个,进行排序,最终得到一个底下是大的煎饼,上边是小的煎饼的序列.这个排序的过程就是煎饼排序. 这 ...
- asp.net 未能写入输出文件--“拒绝访问”的解决办法
概述 将网部署在IIS 7 上,访问本地磁盘路径的时候,提示"**文件拒绝访问". 解决办法 将需要访问的文件夹赋于IIS_IUSRS完全控制的权限即可,不用添加NET ...
- 基于Extjs的web表单设计器 第五节——数据库设计
这里列出表单设计器系列的内容,6.7.8节的内容应该在春节后才有时间出了.因为这周末就请假回老家了,准备我的结婚大事.在此提前祝大家春节快乐! 基于Extjs的web表单设计器 基于Extjs的web ...
- unity textFilde
#pragma strict private var editUsername:String; private var editPassword:String; private var editSho ...
- BZOJ4140 : 共点圆加强版
假设当前询问点为$(A,B)$,那么它在一个以$(x,y)$为圆心的圆里需要满足: $(x-A)^2+(y-B)^2\leq x^2+y^2$ $2Ax+2By\geq A^2+B^2$ 等价于询问所 ...
- BZOJ3413 : 匹配
FDUSC前刷刷题吧.. 本题每个询问就是说将询问串与主串每个后缀匹配,若匹配成功则结束,否则加上lcp的长度 对主串建立后缀树,并用主席树维护DFS序 对于每个询问串,找到最后走到的点fin_nod ...