有两个系统A和B
需要在A单点登录到B进行B系统的操作
借助Iframe的方式,在嵌入B系统页面时实现B系统的登录
由于B系统是通过Session保存用户名的,但是通过A系统请求无法获取到Session
网上搜索后尝试用
protected override void OnInit(EventArgs e)
        {
            Response.AddHeader("p3p", "CP=\"IDC DSP COR ADM DEVi TATi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
        }
但是不好用,哪位有经验说说,多谢~!

解决方案 »

  1.   

    办法是有,利用了这个系统Session设计的不安全性楼主用B系统登录后,是不是可以得到B系统Session的所有内容?
    如果是,找到"ASP.NET_SessionId"然后A系统把B的SessionId设置下
    类似下列语句
    Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "B's Id"))
    这样A系统和B系统用的就是同一个Session
      

  2.   

    A系统写一个接口,B去调用这个接口。比如B打开时请求A系统的某个页面返回用户在A上面是否登录的状态(安全起见建议返回自定义加密的签名),根据返回值然后解析判断
      

  3.   

    现在就是这么实现的,问题在于session丢失
      

  4.   

    这个sessionid是恒定不变的嘛?
      

  5.   

    这个sessionid是恒定不变的嘛?默认情况下,系统会为一个用户自动创建一个SessionId,SessionId的生命周期和session生命周期一致
    过了生命周期就会重新为用户创建一个新Id
    但是用户可以自己指定SessionId,就像用B系统登录后,如果知道B的sessionId,然后在A里设置
    这样A就会和B同用一个Session(当然A自己的session会丢失,这是要考虑的问题)最简单看可行性的方法是,楼主先用B(IE)登录下,用 Fiddler找到SessionId
    然后用Firefox登录下A,调用document.cookie='ASP.NET_SessionId=***';
    看看A能不能访问到B中Session的东西
      

  6.   

    这个sessionid是恒定不变的嘛?默认情况下,系统会为一个用户自动创建一个SessionId,SessionId的生命周期和session生命周期一致
    过了生命周期就会重新为用户创建一个新Id
    但是用户可以自己指定SessionId,就像用B系统登录后,如果知道B的sessionId,然后在A里设置
    这样A就会和B同用一个Session(当然A自己的session会丢失,这是要考虑的问题)最简单看可行性的方法是,楼主先用B(IE)登录下,用 Fiddler找到SessionId
    然后用Firefox登录下A,调用document.cookie='ASP.NET_SessionId=***';
    看看A能不能访问到B中Session的东西
    如果是个可变的值,那这个就不可行
    而且只有IE跨域会丢掉session,其他浏览器是好用的
      

  7.   

    用iframe经常会为这种问题头痛
      

  8.   


    session Id变了意味着Session过期了
    那样即使B中的Session也会过期