You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by sanjeev c joshi <sc...@cisco.com> on 2000/10/05 07:24:59 UTC

Re: Problem with session -- Each Time creating new session, instead of existing one

Hi,

Ok !!  I am using Apache with  Tomact  configured as a servlet Engine.
I have a servlet AuthServlet  whose url looks like this ;

"http://localhost/CSCOnm/servlet/AuthServlet?cmd=validSession "


Based on the "cmd"  parameter the appropriate method  is called by the doGet
method of the servlet. i.e in this case a function
public void validSession(HttpServletRequest req, ServletOutputStream out)
The snippet of code for validSession is;
 {
  :
  :
  HttpSession session = req.getSession(true);
  System.out.println(session);
 :
 :
 }

When I point my browser to the url
"http://localhost/CSCOnm/servlet/AuthServlet?cmd=validSession " , it returns me
the old session from where I can retrieve the  data set in the session.. This is
the expected behaviour.
When I luanch the same url ( do a http request )  from  a perl file in the
cgi-bin directory of Apache , the   req.getSession() returns  the  new session,
instead of giving me the  old session .

 I hope this clears  ur doubts. I would be grateful if u have a solution

 regards

--Joshi


Kitching Simon wrote:

> Sorry, your description of what you are doing (included below)
> doesn't make any sense to me. You are launching what from where????
>
> If you could post a more complete description of what your
> architecture is, that would help.
>
> And are you using apache, or just tomcat? What platform?
>
> Regards,
>
> Simon
>
> > -----Original Message-----
> > From: sanjeev c joshi [SMTP:schidamb@cisco.com]
> > Sent: Wednesday, October 04, 2000 11:17 AM
> > To:   tomcat-user@jakarta.apache.org
> > Subject:      Re: Problem with session -- Each Time creating new session,
> > instead of   existing one
> >
> > Hi,
> >
> > But my problem is  more  fundamental than that.  The AuthServlet ( with
> > request
> > to call validsession() - function)  when rendered from the browser  (
> > using the
> > servlet url ) it seems to be working. But when a perl file ( in the
> > cgi-bin
> > directory)  or a  java file luanches the same url (which inturn calls
> > validsession) , it  fails.
> > Can u explain that ...? what is the problem ? FYI this was working fine
> > with
> > JRun as servlet engine.
> >
> > regards,
> >
> > --Joshi
> >
> > Kitching Simon wrote:
> >
> > > Hi,
> > >
> > > Sessions are identified by cookies (normally, anyway).
> > > The way a web server tells a browser to set a cookie is to send an http
> > > command
> > > in the *header* of the returned data.
> > >
> > > If you look at the documentation for pageContext.include(....), which I
> > > guess is what
> > > you are using to execute your servlet from within you jsp file, you will
> > see
> > > that the
> > > specification *requires* tomcat to flush the output buffer (including
> > all
> > > http headers)
> > > to the client before invoking the included servlet or jsp page.
> > >
> > > The implication is that no included page can ever set a header
> > attribute,
> > > including
> > > cookies. Your servlet code is indirectly calling response.setCookie,
> > which
> > > is calling
> > > response.setHeader(....) but the header info has already gone gone
> > gone....
> > >
> > > It seems to me that an IllegalStateException really should be generated
> > if
> > > you
> > > ever try to set a cookie after the response has been flushed, but this
> > > doesn't seem
> > > to happen. In my experience it just gets ignored.
> > >
> > > I think the solution in your case is to separate your servlet into a
> > *bean*
> > > and a
> > > trivial servlet-wrapper that invokes the bean. You can then include the
> > same
> > > bean into your jsp page with a <jsp:useBean> command, and call it
> > directly.
> > > Because you are *not* doing an include, the response buffer doesn't get
> > > flushed
> > > and (hopefully) your create session call request.getSession(true) (ie
> > > addCookie call)
> > > will then take effect.
> > >
> > > Hope this helps (and hope it is right, part of it is just guessing....)
> > >
> > > Simon
> > >
> > > > -----Original Message-----
> > > > From: sanjeev c joshi [SMTP:schidamb@cisco.com]
> > > > Sent: Wednesday, October 04, 2000 8:45 AM
> > > > To:   tomcat-user@jakarta.apache.org
> > > > Cc:   Joshi Sanjeev C
> > > > Subject:      Problem with session -- Each Time creating new session,
> > > > instead of  existing one
> > > >
> > > > Hi,
> > > >
> > > > I am using Tomact with Apache.I have a problem with the session.
> > > >
> > > > I have a servlet . The servlet AuthServlet  has a method  called
> > > > "validsession()" which does
> > > >
> > > > HttpSession session= request.getsession( true);
> > > > :
> > > > :
> > > > When I  call the AuthServlet from the browser  ( doGet inturn calls
> > > > validsession()) , it returns the existing session appropriately with
> > all
> > > > the session parameters. But when the same AuthServlet is called from
> > > > any other java file or perl sript ( in the cgi-bin directory),  it
> > > > creates  a new session each time  instead of getting my existing
> > > > session.  All the class files are in the  directory as directed in the
> > > > classpath  variable. I have another method in the AuthServlet  "
> > > > getCurrentUser()" where It does  the same thing i.e,
> > > > HttpSession session= request.getsession( true);  strangely  it seems
> > to
> > > > work ( it retruns the existing session .....)
> > > >
> > > > Anyone has faced this problem and found the soultion, kindly help
> > me....
> > > >
> > > > Any quick help ... I will be grateful........
> > > >
> > > >
> > > > regards
> > > >
> > > > --Joshi