我有一个jsp,我设置了一个会话变量。
<% session.setAttribute("user", CrossSession.getUser(token)); %>
但是当我尝试在另一个jsp中读取会话变量“user”时 - 它被加载到iframe(相同的主机,服务器等)中 - 然后我得到NullPointerException
<%= session.getAttribute("user").toString() %>
如何在iframe中获取会话变量?
答案 0 :(得分:0)
当您在<iframe>
元素中嵌入html framgment时,您正在严格指示服务器触发新的HTTP请求,因此您将在另一个不会包含您的{的上下文中获得独立响应{1}}对象。
这就是您收到NPE的原因,因为session
是session
。
但由于所有 jsp 页面都位于同一服务器中,因此您可以将null
对象传递到另一个嵌入的 jsp 但是在使用{{ 1}}指令。
所以不要在iframe中嵌入 jsp ,而是嵌入 jsp ,如下所示:
session
答案 1 :(得分:0)
某些浏览器对于与iframe共享Cookie非常严格,尤其是Safari。绕过这种方法的一种方法是明确地将会话ID作为iframe URL的路径参数传递,因此利用普通servlet容器的“URL重写”支持来进行会话管理(Tomcat默认支持它在框中)。
<iframe src="some.jsp;jsessionid=${pageContext.session.id}" ...>
请注意,我仍然认为您诚实地说iframe是从同一个主机/域提供的。