| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1867 人关注过本帖
标题:[原创]使用框架跨域运行不丢失session的方法
只看楼主 加入收藏
不惑
Rank: 2
等 级:论坛游民
威 望:2
帖 子:569
专家分:13
注 册:2007-3-22
收藏
 问题点数:0 回复次数:3 
[原创]使用框架跨域运行不丢失session的方法

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: 不惑 QQ:7284911
*/ 时间: 2007-9-6 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------


前几天因为一企业网站,内有一客户的服务系统,那个网站因为是租用的空间,不足以存放客户系统,所以另外搞了个服务器,为了使域名的统一性(另一个服务器的域名与原域名差别过大),所以把这个客户系统用框架包含在了原来的网站内,但碰到了因为跨域操作而使客户系统用户登陆后发生session丢失的问题,困挠了一整天,也在此发贴征求解决方法,见:http://bbs.bc-cn.net/viewthread.php?tid=167628。后经本人多方查找资料,经过本人分析和试验,终于把这个问题给解决了,今天见有人问要程序,所以写这个贴子,以供大家共享。
首先说明原理:
系统是认一个一个程序范围的,一般来说,一个IE默认为一个程序范围.
框架因为有了跨域的内容,所以它首先默认的是框架程序本身的程序范围,这样使得框架内的程序范围得不到确认.
为了让这个IE默认为框架内的程序范围,所以我使用了多次跳转.
首先,跳出本框架,进入一个无框架的需要session值的网站页面(就叫它B服务器的页面),并在这个页面中生成一个session以便系统自动生成一个sessionID,然后又跳回到有框架的页面.因为系统已经为这个IE生成了一个sessionID,所以只要不关掉这个IE,系统一直以为这个IE是本程序范围的.这样,再次生成的session值就得以在这个ID中生存下来.
也就达到了骗过系统的目的.
再补充一点,二次跳转使用了不同的方式,原因是我需要把框架外的信息丢弃,而要保存框架内的信息.
而不同的跳转方式会丢弃或保存跳转前的信息的。
程序实现方式:
文件1:
框架文件:index.htm(运行在服务器A上)
<html>

<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<title>奇豪门业</title>
</head>
<frameset rows="1,*" border=0 frameborder="0">
<frame name="winBackLoad" scrolling="no" noresize target="mainweb1" src="default_top.htm">
<frame name="mainweb1" src="http://www.serverB.com/index.asp" scrolling="auto">
<noframes>
<body>

<p>此网页使用了框架,但您的浏览器不支持框架。</p>

</body>
</noframes>
</frameset>

</html>


文件2:index.asp (运行在服务器B上,作用跳转和生成sessionID)
<script>
if (top.location !== self.location) {
top.location=self.location;
}
//这个JS的目的是跳出框架运行
</script>
<%
if session("xm2")="" then
session("xm2")="eee"
'上面这一句的目的只是为了使用session,让系统为这个IE生成一个sessionID,并且判断一下是不是已经跳转过,免得引起死循环。
%>
<META HTTP-EQUIV=REFRESH CONTENT="0;URL='http://www.serverA.com/index.htm'">
<%
,上面这一句是回到框架,注意:只能用上面这个跳转的方法,别用下面的跳转方法。
else
Response.Redirect "index2.asp"
'上面一句才是真正地跳转运行服务器B上的程序!注意:也只能用这方法跳!
end if%>

经过以上的跳转,本IE已经有了服务器B上的sessionID,也就是说,框架虽然是在服务器A上的主框架运行,但它可以确保服务器B上的session不丢失,达到跨域运行的目的。

搜索更多相关主题的帖子: session 框架 客户 中国 
2007-09-07 00:10
multiple1902
Rank: 8Rank: 8
等 级:贵宾
威 望:42
帖 子:4881
专家分:671
注 册:2007-2-9
收藏
得分:0 
SF

先抢楼再看
2007-09-07 17:01
月夜
Rank: 1
等 级:新手上路
威 望:1
帖 子:90
专家分:0
注 册:2007-9-5
收藏
得分:0 
没看懂

自己写整站 累死个王八蛋
2007-10-06 12:55
快速回复:[原创]使用框架跨域运行不丢失session的方法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017140 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved