通过辅助服务器中转session id 无法取得session值。
处理流程:client -> subServer(辅助服务器) -> mainServer(主服务器)
处理解释:client与mainServer之间已经产生一个session,client将session id传递给subServer,subServer通过rpc接口将 session id传递给mainServer,mainServer通过session id,取得session里的一些值,返回给subServer。现象:client与mainServer之间session正确产生
     client将与mainServer之间session的session id正确传递给subServer
     subServer正确传递session id给mainServer
     mainServer正确收到session id问题: mainServer通过session_id($SID);session_start();,读出来的是空,无法读取session里的值。
补充:同样的代码,不通过subServer,正常取到session的值客户要求这样的处理流程,很无奈,请高手相助!!!

解决方案 »

  1.   

    服务器之前传SESSION吗, 我有个思路,就是把SESSION存到数据库里,产生SESSION后,就写到数据库,各服务器之前就可以很好的共享了
      

  2.   

    服务器之间传SESSION吗, 我有个思路,就是把SESSION存到数据库里,产生SESSION后,就写到数据库,各服务器之前就可以很好的共享了 上一个贴打错字了
      

  3.   

    对呀,一般你要共享SESSION的话,把它存到数据库里了吧,
    不过,LZ说的这样只能通过数据库了吧,正常情况是client--->server 这是没问题的,因为session本来就保存在server 里,如果你又用个中间server ,虽然把session_id传过去了,mainserver只接收到了id这个值,怎么能有session里的数据呢。除非你把数据也传过去!
      

  4.   

    客户暂时不考虑用数据库,我也想用数据库的。
    mainserver虽然只拿到了session id,但是session的文件是保存在mainserver上的,钥匙和房间都有了,理论上我觉得应该能到房间拿到东西。
    请各位集思广益一下。
      

  5.   

    但是你用了subserver 就相当于,你把东西放在了subserver 了,但是你用这房子的钥匙去开 mainserver 的房子了,你能找到你想要的数据吗?
      

  6.   

    我用的session id 不是client与subserver之间的session id,而是之前client到mainserver登陆的时候,所取得的session id,所以说我拿的是mainserver的钥匙,去取保存在mainserver上的session信息。谢谢兄弟关注!!!
      

  7.   

    参考:
    http://school.itzcn.com/special-spid-30.html
    上面讲解的比较详细,希望对楼主有所帮助。
      

  8.   

    应该是可以取出来的
    既然你不用中转时可以取出,用了中转,原理其实是一样的,你可以将中转服务器看成中客户端先直接用中转服务器取session值,看能不能取出,如果能,传给 a 
      

  9.   

    第二个要注意session的过期机制,如果过期,且被删除,当然取不到!只要它不被删除,用session id是可以取出来的如果是数据库存取的,你也可以试试直接读数据库
      

  10.   

    刚刚又重新看了rpc的文档,发现了问题所在,rpc是把远程服务器上的方法放到本地服务器上进行处理。如果真是这样,在subserver当然不能找到session内容了。
    看来我一开始的做法就有问题。有什么方法可能使subserver传递一个session id 给mainserver,让mainserver通过session id传递回session的值给subserver。希望大家指点!!!
      

  11.   

    string session_id ( [string id] )在默认情况下,php通过cookie的PHPSESSID传递session id
    你可以通过 session_id() 得到当前的 session id
    也可以通过 session_id('myid') 设置当前 session id 为你需要的值在你的情况下 subserver 到 mainserver 的 session id 的传递是你自己控制的
    所以你需要在 mainserver 判断 session id 的来源
    如果是直接从 client 来的,则按默认操作方式进行
    如果是从 subserver 来的,则指定 session id
      

  12.   

    恩,是的,subserver通过get的方式把session id 传递给mainserver,mainserver中先指定session id,随后再开始会话。
      

  13.   

    用session_destroy()可以把session删除,那么session id 没有问题,但是为什么读不出数据呢,难道是跨服务器的原因,session_start()还自动识别客户端传过来的header信息?真是难!!!