用JSP做了一个OA,现在增加了一个discuz做的BBS
想在OA中实现单点登录
就是在OA中增加一个超链接,就可以进入BBS
不用再登录
这个问题难倒了好多好多人
望高手指教

解决方案 »

  1.   

    1:把oa的用户名和密码 导入到 bbs中
    2:用连接地址把oa的用户名和密码 传递到bbs登录页面 自动提交
      

  2.   

    你先了解discuz用户验证机制吧。
    了解了就简单明了了
      

  3.   

    不难。导入数据库 容易吧
    用连接的方法传值会吧  去论坛登陆页看下 用户名 和 密码 的html name属性
    然后看下 form 的 name属性  用js 放在 登陆页的 onload属性里 一个 form1.submit()
    明白了吧
      

  4.   

    或者研究dz的写入的cookie或session,重写你的oa的登录cookie或session
      

  5.   


    两套系统里 session 肯定是不行了 估计cookie 也不行。
    你这方法行不通
      

  6.   

    就算是跨域cookie,不是也可以实现吗?有什么不行的!
      

  7.   

    把discuz登录后的流程看一下。看是怎么验证的。
    伪一个出来有多难呢?
    不是session就是cookie。当然用户数据还是必须。
      

  8.   

    如果不考虑是否discuz。可以考虑sso登录。至于discuz是否有特殊的实现,没研究过,不敢妄言
      

  9.   

    建议看看ucenter,登录验证都在ucenter接口下面完成的,dz或者uchome在登录时,他们会把数据传给ucenter,ucenter进行验证,这个涉及到跨域传输数据,他们是用fsockopen实现的,当然还有其他方式实现跨域传输数据,比如 soap
      最后指出楼主的一个错误,这个不是单点登录,这个是一站式登录,单点登录是指只能在一个PC机登录,实现这个也很简单,用php的自定义session即可实现,更新sessionid
      

  10.   

    用DZ的那套cookie加解密函数处理其它系统的cookie值.
      

  11.   

    基本原则:既然不能共享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。然后在两个系统登录和退出时,都调用上述接口完成同步。
      

  12.   

    在discuz 上写个中间页面 通过传递过来的值进行discuz的登录操作。其实好像就是写cookie
    discuz上面方法已经写好了
    然后header location 一下
    ok
      

  13.   

    一次登录,就把两个系统所需要的cookie和session都生成投递要用户那里就可以了。
    用带用户名和密码的链接来实现自动登陆是很危险的。
      

  14.   

    UCENTET 呢 
    再不行 读session cookie 
      

  15.   

    无非就数据处理,oa系统验证完用户信息,生成某系列数据给php服务器,php服务器生成session,做为成功登陆验证。。
      

  16.   

    我曾经也有这个需求,后面没办法了……
    还是实现不了。
    你们上面说,与我上一次问的所得到的打案一样,,,,现在在看这样的问题……还是没有看明白。也很想知道,顶一下UCENTER说起来简单,做起来,太难太难。
      

  17.   

    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里...其实就是两个系统怎么通讯的问题...其实不算难,就是很多细节要处理...
      

  18.   

    disuz的文档已经写的很清楚了,不看文档怪谁啊!
      

  19.   

    可以用模拟post多方提交实现登录的,测试时候可以,但有时候又不行了。具体没研究了。。
      

  20.   

    session cookie解决问题吧,我这边的系统就是这样互通的
      

  21.   

    楼上已经有很多提出来了,就是用ucenter。这个可以很好的解决其他系统与dz的互联问题的。
    ucenter的java版本在此可以看一下。
    http://code.google.com/p/discuz-ucenter-api-for-java/downloads/list
      

  22.   

    了解过ucenter的肯定可以解决这个问题
      

  23.   

    找个中转的.....登陆时  搞两个表单不就行了 一个隐藏  就可以了...一次提交两份表单..提交到OA  跟BBS
      

  24.   

    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
    这两个方式都不是很难。