Java 如何避免创建会话?
我的设置如下Java 如何避免创建会话?,java,apache-flex,session,session-cookies,blazeds,Java,Apache Flex,Session,Session Cookies,Blazeds,我的设置如下 可在/myApp/mainServlet下访问的主应用程序servlet/ 一个小型的“手工制作”soap代理,它向来自客户端的soap调用添加安全头(用户名、密码) Flex客户端与主servlet对话(通过BlazeDS接口),并通过此soap代理向第三方发送一些soap调用 flex客户端有一个会话id,该id是在它第一次与主servlet对话时设置的,它返回一个HTTP头,比如“set Cookie:”JSESSION:something;Path=/myApp”。然后
- 可在/myApp/mainServlet下访问的主应用程序servlet/
- 一个小型的“手工制作”soap代理,它向来自客户端的soap调用添加安全头(用户名、密码)
- Flex客户端与主servlet对话(通过BlazeDS接口),并通过此soap代理向第三方发送一些soap调用
代理servlet是一个非常基本的Spring控制器(只是实现接口),因此基本上只是一个基本的servlet。删除cookie可以通过
res.setHeader(“Set cookie”,null);
编辑:很高兴知道,这会删除所有cookies,因为它们都设置在同一个标题中
我建议您不要在servlet中这样做,过滤器更好,因为它的侵入性更小,比如:
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException
{
HttpServletResponse res = (HttpServletResponse) response;
try
{
chain.doFilter(request, res);
}
finally
{
res.setHeader("Set-Cookie", null);
}
}
这个解决方案的灵感来自于at randomcoder。谢谢你的回答,Kiril!顺便说一句-你是在暗示会话总是在Java Servlet容器中创建的吗?我问这个问题是因为我不确定规范是怎么说的。谁负责创建会话?@oligofren你用
response.getSession()创建会话
。你说你有一个“SOAP代理”,它到底是如何代理的,以及到哪里去的?SOAP响应的实际来源可能是设置cookie吗?这一点很好!我从来没有想过,但是是的:它重定向到Axis服务(在Glassfish上运行),这当然可以设置会话id。在对一个简单的servlet(ch simple web/simple webapp中的代码)进行了一些实验之后,我现在可以看到一个基本的servlet没有返回JSESSIONID,除非我执行getSession()。因此,您的确是对的,会话cookie来自我代理请求的服务器!