Details
-
Type: Improvement
-
Status: Closed
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: 1.8.2-EE-GA_P01, 1.8.2a
-
Fix Version/s: 1.8.3, 1.8.2-EE-GA_P02
-
Labels:None
-
Environment:Any
-
Affects:Compatibility/Configuration
Description
Currently, ICEfaces will detect that a client doesn't support cookies and will automatically switch to cookie-less mode where the session ID is transferred using request parameters rather than cookies. However, this currently only works when Ajax Push is not used as Ajax Push requires cookies.
We have run into a situation where URL rewriting is required to support different sessions in multiple tabs/windows of the same browser instance but Ajax Push is also required. In this case, turning off cookies is not an options. Due to this requirement, we need a way to force ICEfaces into "cookieless mode" using a configuration parameter. This parameter will force ICEfaces to use URL rewriting instead of cookies for most requests but should also allow Ajax Push to function as cookies do not have to be turned off.
We have run into a situation where URL rewriting is required to support different sessions in multiple tabs/windows of the same browser instance but Ajax Push is also required. In this case, turning off cookies is not an options. Due to this requirement, we need a way to force ICEfaces into "cookieless mode" using a configuration parameter. This parameter will force ICEfaces to use URL rewriting instead of cookies for most requests but should also allow Ajax Push to function as cookies do not have to be turned off.
Issue Links
- blocks
-
ICE-5369 Clicking on a link in IceFacesPortlet deployed in Web Space Server fails during direct access
- Closed
-
ICE-6791 Cookieless mode causes inputFile to disappear on file upload
- Closed
- depends on
-
ICE-6032 cookieless mode bridge reload causes new session
- Open
- duplicates
-
ICE-6024 inputRichText no longer displays/works with suggestions/changes from ICE-5871
- Closed
Activity
Deryk Sinotte
created issue -
Deryk Sinotte
made changes -
Field | Original Value | New Value |
---|---|---|
Salesforce Case | [] | |
Fix Version/s | 1.8.2-EE-GA_P02 [ 10226 ] | |
Assignee | Deryk Sinotte [ deryk.sinotte ] |
Ken Fyten
made changes -
Salesforce Case | [] | |
Fix Version/s | 1.8.3 [ 10211 ] |
Ken Fyten
made changes -
Salesforce Case | [] | |
Affects | [Compatibility/Configuration] |
Deryk Sinotte
made changes -
Attachment | ICE-5871.patch [ 12429 ] |
Ken Fyten
made changes -
Salesforce Case | [] | |
Assignee Priority | P2 | |
Assignee | Deryk Sinotte [ deryk.sinotte ] | Ted Goddard [ ted.goddard ] |
Repository | Revision | Date | User | Message |
ICEsoft Public SVN Repository | #21954 | Mon Jul 19 14:34:38 MDT 2010 | ted.goddard | caching javascript configuration and calling encodeURL to configure JavaScript for cookieless sessions ( |
Files Changed | ||||
MODIFY
/icefaces/trunk/icefaces/core/src/com/icesoft/faces/webapp/http/servlet/MainSessionBoundServlet.java
MODIFY /icefaces/trunk/icefaces/core/src/com/icesoft/faces/context/DOMResponseWriter.java MODIFY /icefaces/trunk/icefaces/core/src/com/icesoft/faces/context/BridgeFacesContext.java |
Ted Goddard
made changes -
Status | Open [ 1 ] | Resolved [ 5 ] |
Resolution | Fixed [ 1 ] |
Ken Fyten
made changes -
Resolution | Fixed [ 1 ] | |
Status | Resolved [ 5 ] | Reopened [ 4 ] |
Assignee Priority | P2 |
Deryk Sinotte
made changes -
Ted Goddard
made changes -
Deryk Sinotte
made changes -
Salesforce Case | [] | |
Assignee Priority | P3 |
Ken Fyten
made changes -
Salesforce Case | [] |
Ted Goddard
made changes -
Status | Reopened [ 4 ] | Resolved [ 5 ] |
Resolution | Fixed [ 1 ] |
Ken Fyten
made changes -
Status | Resolved [ 5 ] | Closed [ 6 ] |
Assignee Priority | P3 |
Arran Mccullough
made changes -
It turns out that simply adding a configuration parameter is not going to solve the problem. To properly do URL rewriting (encode the jsessionid parameter in the URL), you are supposed to use the HttpServletResponse.encodeURL method. This is exposed in the JSF via ExternalContext,encodeResourceURL. Each URL that needs to have the jsessionid written on to it should be run through this method. The JavaDoc for HttpServletResponse.encodeURL states that, to be robust, all URLs emitted by the servlet or framework should be run through this method. The container (e.g. Tomcat) is responsible for deciding whether or not to add the jsessionid. So the first step is to properly use the encodeResourceURL method for those URLs that the bridge uses to make various requests.
Typically, the container detects whether or not to actually do the URL rewriting. The main scenario would be when the client has cookies disabled. However, it's possible that the container also has a switch for adjusting how the jsessionid is passed back and forth. For example, with Tomcat, you can specify as part of the Context configuration that cookies should not be used for jsessionid communication:
<Context cookies="false">
This allows you to leave cookies enabled in the client, but still use URL rewriting for passing the jsessionid.