我有一个jsp,我设置会话变量。
<% session.setAttribute("user", CrossSession.getUser(token)); %>
但是,当我尝试读取另一个JSP中的会话变量“用户” - 这得到了在iframe(同一台主机,服务器等)加载 - 然后我就得到NullPointerException异常
<%= session.getAttribute("user").toString() %>
我怎样才能获得iframe中我的会话变量?
我有一个jsp,我设置会话变量。
<% session.setAttribute("user", CrossSession.getUser(token)); %>
但是,当我尝试读取另一个JSP中的会话变量“用户” - 这得到了在iframe(同一台主机,服务器等)加载 - 然后我就得到NullPointerException异常
<%= session.getAttribute("user").toString() %>
我怎样才能获得iframe中我的会话变量?
有些浏览器是相当严格的,以与iframe中,特别是Safari浏览器共享的cookie。 绕过这一点的方法之一是明确地传递会话ID为iframe的URL路径参数,在此利用的“URL重写”支持平均servlet容器为会话管理(Tomcat的默认开箱即用支持的话)。
<iframe src="some.jsp;jsessionid=${pageContext.session.id}" ...>
请注意,我还以为你在说的iframe送达形式相同的主机/域诚实。
当您嵌入在一个HTML framgment <iframe>
元素,你strictelly指示服务器触发一个新的HTTP请求,因此你将有将不包括你的另一范围内的独立响应session
对象。 这就是为什么您收到一个NPE,因为session
是null
。
但是,因为你所有的JSP页面在同一服务器内,可以让session
跨越另一个JSP编程传递的对象,但是当使用<jsp:include />
指令。
因此,而不是embeding一个iframe里面的JSP,嵌入JSP类似如下:
<jsp:include page="page_name.jsp" />