从IFRAME访问会话变量(Access Session variable from iframe)

2019-10-20 17:48发布

我有一个jsp,我设置会话变量。

<% session.setAttribute("user", CrossSession.getUser(token)); %>

但是,当我尝试读取另一个JSP中的会话变量“用户” - 这得到了在iframe(同一台主机,服务器等)加载 - 然后我就得到NullPointerException异常

<%= session.getAttribute("user").toString() %>

我怎样才能获得iframe中我的会话变量?

Answer 1:

有些浏览器是相当严格的,以与iframe中,特别是Safari浏览器共享的cookie。 绕过这一点的方法之一是明确地传递会话ID为iframe的URL路径参数,在此利用的“URL重写”支持平均servlet容器为会话管理(Tomcat的默认开箱即用支持的话)。

<iframe src="some.jsp;jsessionid=${pageContext.session.id}" ...>

请注意,我还以为你在说的iframe送达形式相同的主机/域诚实。



Answer 2:

当您嵌入在一个HTML framgment <iframe>元素,你strictelly指示服务器触发一个新的HTTP请求,因此你将有将不包括你的另一范围内的独立响应session对象。 这就是为什么您收到一个NPE,因为sessionnull

但是,因为你所有的JSP页面在同一服务器内,可以让session跨越另一个JSP编程传递的对象,但是当使用<jsp:include />指令。

因此,而不是embeding一个iframe里面的JSP,嵌入JSP类似如下:

<jsp:include page="page_name.jsp" />


文章来源: Access Session variable from iframe