【解决】实现jsp和php共享session(多服务器:Apache和Tomcat)
这个问题是困惑我和经理很久的一个心结,应用使用JAVA开发的,SNS使用PHP开发的(为什么如此开发,自然有它的道理了)。最后到了整合阶段就犯愁了。怎样实现J2EE和PHP的session共享呢?J2EE用的Tomcat服务器,PHP用的是Apache服务器。
当然,
1、最直接,网上找到的最多的方法就是两个服务器进行整合咯,你可能会问,为什么不用一个服务器呢,那样session就直接可以共享了(这么问就菜了哦~~可以百度翻翻资料,这里就不多说了)。
两个服务器进行整合,当然得有个连接器了(mod_jk connector),具体不详述,参考以下文章:Apache+tomcat的整合
整合很成功,两个服务器共用80端口(看个人配置咯,想8080也没问题),但session依旧不能共享。整合,只是整合的端口。。。
2、你还可能看到这么一些题目的文章“Apache+Tomcat负载均衡,session共享”。如果你仔细看这些文章的话,你会发现,它所指的是,有多个Tomcat服务器,这些Tomcat服务器使用APACHE来进行服务器请求分派,达到负载均衡的目的。它的“Session共享”,不是指APACHE和Tomcat之间的,而是指多个Tomcat服务器之间的。
3、你还有可能看到这么一篇文章“跨服务器Session共享”,一看,哇,好多方法啊,但每个方法实现起来,都不那么简单。
4、无敌方法,“单点登录(Single Sign On),简称 SSO”,配置也要耗费很多时间的。
最终,经过千辛万苦,你看到了这么一篇文章“PHP通过php-java-bridge调用Java类中方法”,下载PHP/JAVA Bridge进行相关配置即可。
这里不详述具体实现过程,只是提起一些容易碰到的问题。
1、如果是远程服务器include文件,PHP ini中要开启相关模块的,比如url_include什么的。不然会报错的。
2、JAVA文件只有在Java bridge中运行时PHP获取到的JSP设置的session(即两者相互获取设置的相同名的session)才是正常的。所以你需要将你的JAVA应用和Java bridge两个应用进行整合。
3、如果使用的是Java bridge,APACHE和Tomcat就不要进行整合了,还是用两个不同的端口,否则PHP会报503服务器错误的。具体原因还没确定,应该是端口冲突了。