前几天因为一企业网站,内有一客户的服务系统,那个网站因为是租用的空间,不足以存放客户系统,所以另外搞了个服务器,为了使域名的统一性(另一个服务器的域名与原域名差别过大),所以把这个客户系统用框架包含在了原来的网站内,但碰到了因为跨域操作而使客户系统用户登陆后发生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不丢失,达到跨域运行的目的。
分享到:
相关推荐
在 ASP.NET 开发中,跨域和 Session 失效问题是一个常见的问题,但通过添加“P3P”协议和使用 HttpContext.Current.Session,我们可以解决这个问题,从而确保应用程序的正常运行。 相关知识点: * 跨域和 Session ...
通过这种方式,可以解决在IE浏览器中由于P3P隐私设置导致的iframe跨域cookie丢失问题,进而解决session失效导致的用户频繁重新登录的问题。这个方法在技术上是可行的,但需要网站管理员操作,确保P3P声明符合实际的...
总的来说,针对IE浏览器中iframe跨域导致Session丢失的问题,关键在于理解浏览器对跨域Cookie的处理方式,特别是IE的独特限制。通过设置P3P头,可以通知浏览器允许iframe内的页面使用和共享Session,从而修复登录和...
在Web开发中,Iframe(内联框架)常用于嵌入其他网页内容,但涉及到跨域访问时,尤其是在处理Cookie和Session时,会遇到一些挑战。本文主要探讨如何解决Iframe跨域访问Cookie和Session的问题。 首先,理解跨域访问...
在前后端分离的架构中,Vue.js作为前端框架与Spring Boot作为后端服务进行交互时,常常会遇到跨域和Session、Cookie失效的问题。本文将详细介绍如何解决这些问题。 首先,跨域是由于浏览器的安全策略限制,同一源...
三、程序有框架页面和跨域情况原因一我们就不过多涉猎了,注意服务器维护以及服务安全。 Session丢失的解决方法: 1、增加硬件配置,无非就是扩容和扩内存。 2、采用第三方应用来保存session: A、State Server ...
2. **杀毒软件扫描Web.Config**:某些杀毒软件扫描`Web.Config`文件会导致应用程序重启,进而丢失Session。 3. **服务器资源不足**:当服务器内存不足时,可能会清理Session来释放内存。 4. **代码中的Session管理...
除此之外,程序框架页面和跨域请求可能导致Session丢失,当涉及到多个域时,Session状态可能无法正确共享。解决这个问题的一个方法是检查代码,确保在发起跨域请求时Session的管理是正确的。 最后,对于那些使用IIS...
3. 不能跨域共享:每个域名有自己的Session,不同域间的页面无法直接共享Session数据。 4. 安全性:Session信息存储在服务器端,相对安全,但若Session ID被窃取,可能会导致安全性问题。 5. 依赖客户端:如果用户...
本文将详细探讨一个特定的问题,即“uploadify在Firefox下丢失session问题的解决方法”,这是一个常见的前端上传插件与后端session管理不兼容的问题,特别是在使用JSP和Firefox浏览器时。 首先,了解session的基本...
2. 应用程序代码中有导致Session状态丢失的代码,如使用Session.Abandon()方法。此外,如果服务器内存不足,也会触发应用程序域重启,导致Session状态数据丢失。 3. 应用程序存在框架页面和跨域情况。在某些特殊的...
过多的Web进程可能导致Session不能共享,每次请求由不同的进程处理,从而导致Session数据丢失。调整该设置或改变Session存储方式可以解决此问题。 总之,ASP.NET项目中Session丢失可能是多种因素造成的,包括杀毒...
1. **问题描述**:当使用`iframe`跨域嵌套时,尤其是针对`ASP.NET`开发的网站,可能会出现`session`丢失的情况。这是因为`session`依赖于cookie,而跨域请求默认不会携带cookie信息。 2. **解决方案**: - **CORS...
此外,Session依赖于客户端的会话标识(默认情况下是Cookie),如果禁用了Cookie或在不同的浏览器或设备之间切换,可能会丢失Session信息。 为了提高性能和安全性,可以考虑使用Forms Authentication或基于Token的...
CodeIgniter的Session组件默认使用cookie存储session数据,但也可以通过配置使用数据库或其他存储机制。这提供了灵活性,但也可能带来兼容性问题,尤其是在升级框架版本或更改服务器设置时。 1. **Session类的使用*...
#### 使用框架跨域运行不丢失session的方法 在Web应用中,跨域访问是一个常见的需求,尤其是在涉及到多个子系统的复杂架构中。但是,在跨域请求中保持session状态则是一个挑战。给定的部分内容中,提到了一种通过多...
本文将深入探讨Laravel中的Session机制,包括它的实现方式、配置、使用方法以及常见问题。 1. **Session的基础概念** Session在Web开发中用于临时存储用户在浏览过程中的数据,例如购物车内容、用户登录状态等。...
—— 登录封禁、按照业务分类封禁、按照处罚阶梯封禁持久层扩展 —— 可集成Redis、Memcached等专业缓存中间件,重启数据不丢失分布式会话 —— 提供jwt集成、共享数据中心两种分布式会话方案微服务网关鉴权 —— ...
接下来,我们将深入探讨`jQuerySession.js`的工作原理和使用方法。 1. **引入插件** 在HTML文件中,首先需要引入jQuery库和`jQuerySession.js`插件。确保在页面中正确放置这些引用,通常是在`<head>`标签内: ``...
但这种方法依赖于负载均衡器的粘性会话功能,如果该服务实例故障,可能导致Session丢失。 4. **JWT(JSON Web Token)**:使用JWT作为Session的替代,将用户信息加密并存储在客户端,每次请求时携带Token,服务端...