难倒300人的PHP问题(discuz) 用JSP做了一个OA,现在增加了一个discuz做的BBS想在OA中实现单点登录就是在OA中增加一个超链接,就可以进入BBS不用再登录这个问题难倒了好多好多人望高手指教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1:把oa的用户名和密码 导入到 bbs中2:用连接地址把oa的用户名和密码 传递到bbs登录页面 自动提交 你先了解discuz用户验证机制吧。了解了就简单明了了 不难。导入数据库 容易吧用连接的方法传值会吧 去论坛登陆页看下 用户名 和 密码 的html name属性然后看下 form 的 name属性 用js 放在 登陆页的 onload属性里 一个 form1.submit()明白了吧 或者研究dz的写入的cookie或session,重写你的oa的登录cookie或session 两套系统里 session 肯定是不行了 估计cookie 也不行。你这方法行不通 就算是跨域cookie,不是也可以实现吗?有什么不行的! 把discuz登录后的流程看一下。看是怎么验证的。伪一个出来有多难呢?不是session就是cookie。当然用户数据还是必须。 如果不考虑是否discuz。可以考虑sso登录。至于discuz是否有特殊的实现,没研究过,不敢妄言 建议看看ucenter,登录验证都在ucenter接口下面完成的,dz或者uchome在登录时,他们会把数据传给ucenter,ucenter进行验证,这个涉及到跨域传输数据,他们是用fsockopen实现的,当然还有其他方式实现跨域传输数据,比如 soap 最后指出楼主的一个错误,这个不是单点登录,这个是一站式登录,单点登录是指只能在一个PC机登录,实现这个也很简单,用php的自定义session即可实现,更新sessionid 用DZ的那套cookie加解密函数处理其它系统的cookie值. 基本原则:既然不能共享session,那有三个办法来解决:要么让jsp解析php设置的cookie,要么让php解析jsp设置的cookie,要么实现一个中间系统来设置两者的cookie。可以用接口的方式:1、OA里开一个接口:sso.jsp,提交参数username、timestamp和该username与timestamp一起经过私钥签名的结果(比如MD5Salt),然后OA验证签名,并设置session。2、DZ里开一个接口:sso.php,也是提交那些参数,先验证签名,判断用户是否存在,如果不存在直接向数据库插入这个用户,然后根据dz的方式设置cookie。然后在两个系统登录和退出时,都调用上述接口完成同步。 在discuz 上写个中间页面 通过传递过来的值进行discuz的登录操作。其实好像就是写cookiediscuz上面方法已经写好了然后header location 一下ok 一次登录,就把两个系统所需要的cookie和session都生成投递要用户那里就可以了。用带用户名和密码的链接来实现自动登陆是很危险的。 UCENTET 呢 再不行 读session cookie 无非就数据处理,oa系统验证完用户信息,生成某系列数据给php服务器,php服务器生成session,做为成功登陆验证。。 我曾经也有这个需求,后面没办法了……还是实现不了。你们上面说,与我上一次问的所得到的打案一样,,,,现在在看这样的问题……还是没有看明白。也很想知道,顶一下UCENTER说起来简单,做起来,太难太难。 ok,继续口水...首先,这种跨系统整合用户的,都要问一个问题: 以那个系统的用户为主:比如你的,应该是以OA用户为主,但是,还是有问题, 用户能否在discuz那边注册,要简单点当然是不给, 把那个url直接跳转到你oa注册页面即可.然后是登陆,一样,把bbs登陆页面跳oa登陆页面.然后,就是bbs那边的用户验证,查下discuz的代码,用户验证部分应该有hook给写插件的,你要自己写个插件挂上去,插件怎么写,还要继续问问题:如果,OA的数据库bbs那边可以直接访问,这个比较好,插件里直接访问OADB,如果用户数据用改动(或是新用户),需要把改动更新到bbsdb那边, 为什么要更新过去...因为bbs那边有很多其它的用户相关页面需要用户信息. 然后还有一个问题,bbs那边是否让用户更新信息....是否要同步到OA这边, 当然最好是不要..或者比较一下两边的用户信息,如果是两边都有的信息, 最好bbs那边不能更改,跳到OA里改, bbs独有的信息,可以改, 所以这个更改用户信息的页面也要修改. 当然你也可以让bbs那边直接改OAdb,不过这个比较混乱,建议不要,bbs对oadb应该是只读.然后,如果数据库不给或无法直接访问. 那么可以通过web service来做,比如soap, oa这边给个server, bbs那边做client,还是差不多,插件里访问oa soap server, 等到结果后更新到bbs的db里...其实就是两个系统怎么通讯的问题...其实不算难,就是很多细节要处理... disuz的文档已经写的很清楚了,不看文档怪谁啊! 可以用模拟post多方提交实现登录的,测试时候可以,但有时候又不行了。具体没研究了。。 session cookie解决问题吧,我这边的系统就是这样互通的 楼上已经有很多提出来了,就是用ucenter。这个可以很好的解决其他系统与dz的互联问题的。ucenter的java版本在此可以看一下。http://code.google.com/p/discuz-ucenter-api-for-java/downloads/list 了解过ucenter的肯定可以解决这个问题 找个中转的.....登陆时 搞两个表单不就行了 一个隐藏 就可以了...一次提交两份表单..提交到OA 跟BBS ucenter和discuz都是康盛的产品,如果想在不同php系统间进行互通,ucenter是个不错的选择。他的原理是在要改造的系统上,实现登录验证和退出的接口,以此来达到单点登录;并且需要按照ucenter对接需求,实现用户密码更改接口,以此实现用户信息变更同步。你的系统是jsp的,关于java的文档请参考google code上的项目:http://code.google.com/p/discuz-ucenter-api-for-java/。另外一个方向是生成discuz的cookie,类似于开源的cms都是用cookie来保存登录状态的(以实现不同系统间的整合),可参考http://wenku.baidu.com/view/ace331fcc8d376eeaeaa31dd.html这两个方式都不是很难。 求一个SQL 如何写一个规则 处理文章URL地址 php 只取小數後的1位, 不要點數前的數字 网页ifame上运行EXE 求一个..htaccess urlrewrite 一个多表查询的SQL语句,给我弄蒙了,来帮看看 一个多表联合查询,出错了,为啥? 请教文件批量上传的问题,急 foreach 循环的问题,请帮忙! 求一php程序,可以对oracle进行操作 fopen和端口的问题 php操作TXT的问题
2:用连接地址把oa的用户名和密码 传递到bbs登录页面 自动提交
了解了就简单明了了
用连接的方法传值会吧 去论坛登陆页看下 用户名 和 密码 的html name属性
然后看下 form 的 name属性 用js 放在 登陆页的 onload属性里 一个 form1.submit()
明白了吧
两套系统里 session 肯定是不行了 估计cookie 也不行。
你这方法行不通
伪一个出来有多难呢?
不是session就是cookie。当然用户数据还是必须。
最后指出楼主的一个错误,这个不是单点登录,这个是一站式登录,单点登录是指只能在一个PC机登录,实现这个也很简单,用php的自定义session即可实现,更新sessionid
1、OA里开一个接口:sso.jsp,提交参数username、timestamp和该username与timestamp一起经过私钥签名的结果(比如MD5Salt),然后OA验证签名,并设置session。
2、DZ里开一个接口:sso.php,也是提交那些参数,先验证签名,判断用户是否存在,如果不存在直接向数据库插入这个用户,然后根据dz的方式设置cookie。然后在两个系统登录和退出时,都调用上述接口完成同步。
discuz上面方法已经写好了
然后header location 一下
ok
用带用户名和密码的链接来实现自动登陆是很危险的。
再不行 读session cookie
还是实现不了。
你们上面说,与我上一次问的所得到的打案一样,,,,现在在看这样的问题……还是没有看明白。也很想知道,顶一下UCENTER说起来简单,做起来,太难太难。
比如你的,应该是以OA用户为主,但是,还是有问题, 用户能否在discuz那边注册,
要简单点当然是不给, 把那个url直接跳转到你oa注册页面即可.
然后是登陆,一样,把bbs登陆页面跳oa登陆页面.然后,就是bbs那边的用户验证,查下discuz的代码,用户验证部分应该有hook给写插件的,
你要自己写个插件挂上去,插件怎么写,还要继续问问题:如果,OA的数据库bbs那边可以直接访问,这个比较好,插件里直接访问OADB,如果用户数据用改动(或是新用户),需要把改动更新到bbsdb那边, 为什么要更新过去...因为bbs那边有很多其它的用户相关页面需要用户信息. 然后还有一个问题,bbs那边是否让用户更新信息....是否要同步到OA这边, 当然最好是不要..
或者比较一下两边的用户信息,如果是两边都有的信息, 最好bbs那边不能更改,跳到OA里改, bbs独有的信息,可以改, 所以这个更改用户信息的页面也要修改. 当然你也可以让bbs那边直接改OAdb,不过这个比较混乱,建议不要,bbs对oadb应该是只读.然后,如果数据库不给或无法直接访问. 那么可以通过web service来做,比如soap, oa这边给个server, bbs那边做client,还是差不多,插件里访问oa soap server, 等到结果后更新到bbs的db里...其实就是两个系统怎么通讯的问题...其实不算难,就是很多细节要处理...
ucenter的java版本在此可以看一下。
http://code.google.com/p/discuz-ucenter-api-for-java/downloads/list
你的系统是jsp的,关于java的文档请参考google code上的项目:http://code.google.com/p/discuz-ucenter-api-for-java/。
另外一个方向是生成discuz的cookie,类似于开源的cms都是用cookie来保存登录状态的(以实现不同系统间的整合),可参考http://wenku.baidu.com/view/ace331fcc8d376eeaeaa31dd.html
这两个方式都不是很难。