我先把要跨的域的情况交代清楚:(一个例子啊!!!)
http://www.a.com为主域
还有好多的子域,如http://bbs.a.com    http://mail.a.com   http://blog.a.com ...........
要实现的是在其中一个域上登录后,在其它的域也是登录状态,声明这些域中都是用PHP写的动态页面,并且用的是session来传值的。对于跨域我了解的一些情况如下:
一,网上多数说可以用cookie来实现,但是cookie的安全性不如session,但又说session不能跨域。
二,用iframe,我试过数据可以传过来,但是在控制iframe的高度又遇到问题了,因为iframe的src="http://www.a.com/xxx.php?id=100"是个动态的页面,想让iframe的高度随着http://www.a.com/xxx.php页的高度来变化,找了好长时间,找到一种“用剪贴板实现跨域iframe高度自适应”的方法,但是这种方法只适用于IE浏览器,而且有个不足之处:就是遇到一些安全性较好的操作系统(如:win2003)会弹出“是否允许从剪切板上粘贴内容”的对话框。,最终这种方法只适合IE浏览器,用其它浏览器就不行了。还待解决中.......高手们:还有什么方法吗?或者如果是以上的方法怎么做更完美呢?我们一起讨论一下啊!!!!!积极参与啊!!!!!

解决方案 »

  1.   


    说详细点,怎么用memcache共享呢?对这方面我还不了解!!!
      

  2.   


    说详细点,怎么来实现?我对memcache还不了解!!!请教一下!!
      

  3.   

    你这种根本不算真正意义上的跨域,要解决太简单了。http://cn2.php.net/session_set_cookie_params
    session_set_cookie_params  ( int $lifetime  [, string $path  [, string $domain  [, bool $secure  [, bool $httponly  ]]]] )
    第三个参数指定为.a.com即可。至于楼上几位说的memcache和数据库,只是session的后端存储实现不一样而已,和跨域完全没关系。
      

  4.   

    写个例子,让我们大家看一下!说明这些程序该写到http://www.a.com下还是其它子域下呢?
      

  5.   

    理论上,这位师兄说的是对的!
    我也见过别人说要session数据库共享,最新买的一本杜江先生的书,说的也是数据库共享的办法!显然对于跨子域的来说,有一定的误导性!如果session是用cookie机制的,这个办法可以!但如果sessionid是get传递的,是否还有跨域的问题? 不知老兄有何见解!还有的说 是如果是跨不同的域名,如何解决,请教一下了!
      

  6.   

    程序任意写,在session_start前session_set_cookie_params  ( int $lifetime  [, string $path  [, string $domain  [, bool $secure  [, bool $httponly  ]]]] ) 
    $domain没为.a.com或在配置文件里设
      

  7.   

    这个贴子是哪时候发的,我16点都没看见的,奇怪。的确,surfchen老兄说得对,那个只是共用SESSION的问题,session_set_cookie_params的域名参数那里设为.a.com 。
      

  8.   

    是在所有有session_start的页面前都要加上session_set_cookie_params  ( int $lifetime  [, string $path  [, string $domain  [, bool $secure  [, bool $httponly  ]]]] )吗?  
      

  9.   

    是session.cookie_domain =吗????
      

  10.   

    是http://cn2.php.net/manual/en/session.configuration.php#ini.session.cookie-domain
      

  11.   

    http://www.scriptlover.com/pages/article.asp?ArticleID=340
      

  12.   


    我看了一下,把php.ini修改成session.cookie_domain=".a.com"就可以了,是吗?
    等年后来了,把服务器上的配置文件改过来,看看是否行得通.先谢谢喽!  ‘~’ 
      

  13.   


    我看了一下,把php.ini修改成session.cookie_domain=".a.com"就可以了,是吗?
    等年后来了,把服务器上的配置文件改过来,看看是否行得通.先谢谢喽!  ‘~’ 
      

  14.   


    本域和子域的相互访问: www.aa.com和book.aa.com
    解决方法:如果想做到数据的交互,那么www.aa.com和book.aa.com必须由你来开发才可以。可以将book.aa.com用iframe添加到 www.aa.com的某个页面下,在www.aa.com和iframe里面都加上document.domain = "aa.com",这样就可以统一域了,可以实现跨域访问。就和平时同一个域中镶嵌iframe一样,直接调用里面的JS就可以了。(这个办法我没有尝试,不过理论可行)这种方法我试过了,就像我贴子中说的那样,iframe的高度不能自适应,对它的高度您有什么见解啊?????
      

  15.   

    是的,楼主可以到PHP手册看一下,讲得很清楚的,只不过是英语的。
      

  16.   

    这个不算跨域啊, 跨域严格说是在 http://www.a.com 和 http://www.b.com之间实现登陆状态共享,lz搜点单点登录方面的架构看看就明白了
      

  17.   


    完全跨域没做过,有好的解决方案或原理吗?看过别人分析discuz的文章,意思是一个是如果一个登录,同时了登录另一个,如果一个退出,同时也退出另一个,如果一个过期,同时另一个也过期,这个可解决登录退出问题,但没说session是否也能共享?
      

  18.   

    你那个主域是相同的,算是跨子域要实现完全跨域(a.com , b.com, c.com),相当有难度
    特别是要高效的情况下在我做的一个portal系统中
    使用SOAP + SSO Server,以后台的方式进行登录同步
    但在注销方面暂时不太满意
    因为一个portal中随时有过百个应用
    注销效率的问题很烦人...
      

  19.   

    必须让cookie信息在定级域名下修改
      

  20.   

    由于安全问题,我不想用cookie,用session就不能解决问题吗?
      

  21.   

    好吧,你还没理解session和cookie的关系。我又要忍不住长篇大论了。还是忍着吧,免得和人吵架,哈哈。
      

  22.   

    第一种,session 通过 cookie 存储了 session id。那么当 cookie 跨域时,session 也跨域了。但是 cookie 并不能实现完整意义的跨域,只能实现子域的跨域。那么每个域都有自己的 session id,而session实际的验证交由身份验证服务器完成,就可以实现实际意义上的跨域。第二种说起来简单,实现起来还有性能、通讯量、缓存等问题需要解决。
      

  23.   

    简单的说 SESSION在浏览器那块用的是COOKIE