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调用
flex客户端有一个会话id,该id是在它第一次与主servlet对话时设置的,它返回一个HTTP头,比如“set Cookie:”JSESSION:something;Path=/myApp”。然后将此cookie发送到服务器,以通知客户端与哪个会话关联

问题是,小soap代理还返回一个带有会话id的cookie(对于通过它进行的每个调用),Flex客户端在与主servlet对话时使用这些cookie。这些其他会话id对它来说是未知的,当然没有任何效果

我不希望从soap代理返回会话cookie,并且我已经通过告诉Apache前端剥离来自soap代理的所有“Set cookie”头来验证了这样做可以解决问题。不幸的是(由于某些设置限制),这不是我在生产中可以使用的方法,因此我需要通过编程来修复它

如何使servlet不尝试设置任何会话ID?我相信我已经看到了告诉Jetty(应用服务器)不要发送会话ID的方法,但这也会影响主servlet的发送能力,而且不可移植


代理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来自我代理请求的服务器!