有A,B两个网站,分别部署在不同的服务器上。假设A网站的域名是 http://www.A.com
    B网站的域名是http://www.B.comA网站是个实质性的网站,有其代码和数据库。
B网站里面只有一个页面,里面只是内嵌了一个iframe,src为http://www.A.com。目标:就是为了在访问B网站的时候,地址栏里面的地址始终是http://www.B.com,而实际上使用的全是A网站的内容。在A网站里面有个菜单,根据用户的登录状态,显示不同的内容。因此在后台用session来保存登录状态,并在后台判断这些状态,控制菜单内容的显示。现在的问题是,通过A网站的域名直接访问A网站,菜单能够根据用户的登录状态显示不同的内容。但是通过B网站的域名来使用A网站时,菜单却没有变化。请帮忙分析一下原因,给出一些解决方案。至于把A网站的内容,放到B网站的服务器上这样的方案,老板肯定是不同意,所以就不用说了。将A网站的域名改成B网站的域名,老板也不同意。现在他要求的就是通过修改A网站的代码,实现目标。

解决方案 »

  1.   

    直接访问A网站是没有问题的。
    但是通过B网站来访问A网站,菜单就没有变化了。
      

  2.   

    在代码里,我是用个panel把那几个要控制显隐性的菜单项包裹起来的,然后在后台判断session里面记录的是否登录的状态,设置panel的visable。说白了,直接用域名 www.a.com访问,是没有问题的。
    但是通过我上面说的特殊处理过的B网站,菜单项就有问题了。没有根据登录的状态做变化了。
      

  3.   

    通过域名 www.A.com登录是没有问题的。
    但是通过域名www.B.com登录以后,虽然也显示了登录以后的页面,但是菜单的状态没有变化。
      

  4.   

    刚才做了个小实验,发现通过www.B.com登录以后,记录登录状态的session里面是没有值的。
      

  5.   

    通过www.A.com登录以后,记录登录状态的session里面是值的。
      

  6.   

    cookie跨域指的是这种news.a.com 和b.a.com这种域,在同一顶级域名下 
    机器都不同不能跨域进行cookies操作的
    自己编写session封装函数,将session数据保存到数据库中; 
    在调用session_start()函数之前,首先调用session_set_cookie_params,设置为bb.com
      

  7.   

    谢谢楼上的大牛。
    ----------------------------------------------------------------------------
    在调用session_start()函数之前,首先调用session_set_cookie_params,设置为bb.com、
    ----------------------------------------------------------------------------
    这句话可否能够给些代码看看。以前没有写过这样的代码。
    另外其他朋友有没有什么方法,请不吝赐教。
      

  8.   

    首先,不能用SSO登录,域不一样;
    Session不同的站点也不能共享吧
      

  9.   

    把登陆状态的保存, 用Cookie来替代Session试试呢
      

  10.   

    问题我基本上解决了。
    大家踊跃发言,跟我解决方法一样的第一个人,给80分。
    wuyq11 80分,谢谢他给的方案。
    剩下的分给顶贴的朋友。大家皆大欢喜。
      

  11.   

    又一个干坏事的?
    这个是跨域访问的安全性问题,浏览器默认情况下是不允许跨域提交cookie的,而sessionid是保存在cookie中的,所以导致A站页面被嵌入后无法使用session。去google搜索:p3p iframe 提交cookie,有答案。
      

  12.   

    考虑将用户信息存到数据库,像一般用session存放的内容,放到数据库
      

  13.   

    贴一下自己搜到的方案:处理方法:
    打开IIS管理器,打开ASPX页面所在的那个站点的属性->HTTP头->添加按钮自定义HTTP头为 P3P
    自定义HTTP头值为 CP=”CAO PSA OUR”然后保存,再试ASPX访问一切正常。
    在开发中,我们经常会遇到使用Frame来工作,而且有时是为了跟其他网站集成,应用到多域的情况下,而Iframe是不能保存Session的。因此,网上可以找到很多相关的文章,如果网站可以采用设置Web.Config中的配置:<sessionState 
    mode="StateServer"
    stateConnectionString="tcpip=127.0.0.1:42424"
    sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
    cookieless="false" 
    timeout="40" 
    />
    把cookieless="false"改成"true"就可以了。但也同样有个小问题,就是如果页面中采用Javascript的window.location.href=''这样的方式来重定向的话,系统会认为这是另一个新的请求,产生一个新的SessionId,导致原Session同样的丢失。所以对于重定向,还是使用Response.Redirect()为好。除了Ifrmae有丢Session问题外,frameset也有同样的问题。Frameset的问题更不移定,是有时会丢,有时不会丢,这更认人头痛,在网上找到了一个方法,在页面page_onload里添加一语句:
    Response.AddHeader("P3P","CP=CAO PSA OUR");
    FrameSet中的Session丢失问题就解决了。