Iframe跨域Session丢失问题

Justin-Liu
博客专家认证
2013-05-03 04:56:47
有两个系统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\"");
}

但是不好用,哪位有经验说说,多谢~!
...全文
1002 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
全海之澜 2013-08-29
  • 打赏
  • 举报
回复
引用 11 楼 FoxDave 的回复:
我又仔细看了一下,貌似……应该把头加在要登录的系统上
这样解决了吗?兄弟
Justin-Liu 2013-05-06
  • 打赏
  • 举报
回复
我又仔细看了一下,貌似……应该把头加在要登录的系统上
熊猫无敌 2013-05-05
  • 打赏
  • 举报
回复
引用 9 楼 FoxDave 的回复:
session Id变了意味着Session过期了 那样即使B中的Session也会过期
Justin-Liu 2013-05-05
  • 打赏
  • 举报
回复
Justin-Liu 2013-05-04
  • 打赏
  • 举报
回复
引用 1 楼 soladyk 的回复:
办法是有,利用了这个系统Session设计的不安全性 楼主用B系统登录后,是不是可以得到B系统Session的所有内容? 如果是,找到"ASP.NET_SessionId" 然后A系统把B的SessionId设置下 类似下列语句 Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "B's Id")) 这样A系统和B系统用的就是同一个Session
这个sessionid是恒定不变的嘛?
Justin-Liu 2013-05-04
  • 打赏
  • 举报
回复
引用 3 楼 Joyhen 的回复:
其实这个就是站点同步登录了,楼主百度下,大把的
现在就是这么实现的,问题在于session丢失
riyejiancheng 2013-05-04
  • 打赏
  • 举报
回复
用iframe经常会为这种问题头痛
Justin-Liu 2013-05-04
  • 打赏
  • 举报
回复
引用 6 楼 soladyk 的回复:
[quote=引用 5 楼 FoxDave 的回复:] [quote=引用 1 楼 soladyk 的回复:] 办法是有,利用了这个系统Session设计的不安全性 楼主用B系统登录后,是不是可以得到B系统Session的所有内容? 如果是,找到"ASP.NET_SessionId" 然后A系统把B的SessionId设置下 类似下列语句 Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "B's Id")) 这样A系统和B系统用的就是同一个Session
这个sessionid是恒定不变的嘛?[/quote] 默认情况下,系统会为一个用户自动创建一个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的东西[/quote] 如果是个可变的值,那这个就不可行 而且只有IE跨域会丢掉session,其他浏览器是好用的
熊猫无敌 2013-05-04
  • 打赏
  • 举报
回复
引用 5 楼 FoxDave 的回复:
[quote=引用 1 楼 soladyk 的回复:] 办法是有,利用了这个系统Session设计的不安全性 楼主用B系统登录后,是不是可以得到B系统Session的所有内容? 如果是,找到"ASP.NET_SessionId" 然后A系统把B的SessionId设置下 类似下列语句 Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "B's Id")) 这样A系统和B系统用的就是同一个Session
这个sessionid是恒定不变的嘛?[/quote] 默认情况下,系统会为一个用户自动创建一个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的东西
joyhen 2013-05-03
  • 打赏
  • 举报
回复
其实这个就是站点同步登录了,楼主百度下,大把的
joyhen 2013-05-03
  • 打赏
  • 举报
回复
A系统写一个接口,B去调用这个接口。比如B打开时请求A系统的某个页面返回用户在A上面是否登录的状态(安全起见建议返回自定义加密的签名),根据返回值然后解析判断
熊猫无敌 2013-05-03
  • 打赏
  • 举报
回复
办法是有,利用了这个系统Session设计的不安全性 楼主用B系统登录后,是不是可以得到B系统Session的所有内容? 如果是,找到"ASP.NET_SessionId" 然后A系统把B的SessionId设置下 类似下列语句 Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", "B's Id")) 这样A系统和B系统用的就是同一个Session

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧