我有一个servlet负责随机生成验证码图片,并记录到session,另一个servlet处理注册请求,但两边取到的session ID不同。
生成图片:// 将四位数字的验证码保存到Session中。
HttpSession session = request.getSession(false);
session.setAttribute("validateCode", randomCode.toString());
logger.debug(session.getAttribute("validateCode")+" "+session.getId());处理注册请求:logger.debug("会话:"+request.getSession(false).getId()
输出日志显示会话ID是不同的,这两个servlet都是每请求一次都会有一个新的session ID,为什么会这样?

解决方案 »

  1.   

    两个servlet不是同一个request吧?
    你直接用request.getSession()看看对不对
      

  2.   

    我的问题问得不好,应该是:一个servlet负责随机生成验证码图片,并保存验证码到session中,从一个浏览器按f5多次请求这一个servlet,其session ID应该是相同的吧,但我发现每次都不一样。//servlet中session操作的代码
    HttpSession session = request.getSession(false);
    session.setAttribute("validateCode", randomCode.toString());
    logger.debug(session.getAttribute("validateCode")+" "+session.getId());结果日志中输出的session ID每次请求都不同。这可是一个servlet啊,1楼同志说不是一个request,当然不是一个请求了,但session不是多个请求共享吗?
      

  3.   

    新进展!如果不用apache就没有问题,我用apache转发,结果每次请求session ID都不一样,直接请求tomcat则正常。怎么会这样?
      

  4.   

    生成图片应该是一个jsp吧。
    直接用,不用通过request获得啦
    session.setAttribute("validateCode", randomCode.toString());
    logger.debug(session.getAttribute("validateCode")+" "+session.getId());
      

  5.   

    问题出在apache转发上,直接http://localhost:8080/abc/getCheckCodeImg没有问题,如果http://localhost/getCheckCodeImg则不行,httpd.conf配置如下:

    ProxyPass /getCheckCodeImg ajp://127.0.0.1:8009/abc/getCheckCodeImg
    ProxyPassReverse /getCheckCodeImg ajp://127.0.0.1:8009/abc/getCheckCodeImg

    用的是代理,转发同时把abc这个目录名去掉了
      

  6.   

    进一步缩小问题所在:我的设置中,通过代理和反向代理去掉了URL中的abc,如果不去掉,改为如下:
    ProxyPass /abc/getCheckCodeImg ajp://127.0.0.1:8009/abc/getCheckCodeImg
    ProxyPassReverse /abc/getCheckCodeImg ajp://127.0.0.1:8009/abc/getCheckCodeImg 这就没有问题了!但这带来新的问题!那个想去掉的abc是什么呢?它是tomcat/webapps/abc,是tomcat发布目录下应用的根,因为tomcat有一个默认的root,另外webapps下还有几个默认应用,因此自己建的应用需要有一个自定义目录,然后用http://localhost:8080/abc去访问它,但正式发布时是不想要这个目录的,我本来想用转发去掉,看来有点问题,请问高手们有没有遇到这个问题?大家是如何去掉这个目录名的?
      

  7.   

    request.getSession().getAttribute("page");是类似于这种格式吧