String encodeURL(String url)
Encodes the specified URL by including the session ID in it, or, if encoding is not needed, returns the URL unchanged.
在客户端禁用了cookie后,如果不用这个方法来ecnode一下URL,那么session就无法使用。
加了此方法后会在url后面追加jsession=*******的信息,也就是追加session ID。
jsession:会话cookie的名字
O_Reilly书籍对此问题的建意
I recommend that you take the time to add encodeURL( ) calls for all references up front, even if you know
that all your current users have browsers that support cookies. One day you may want to extend the user
base and lose control over the browsers they use. It's also common that users disable cookies in fear of Big
Brother watching. Yet another reason to prepare for URL rewriting from the beginning is to support new types
of clients that are becoming more and more common, such as PDAs and cell phones. Cookie support in these
small devices is not a given.
知识点扩展:
在Tomcat 6.0.16.中,Session的创建是调用org.apache.catalina.connector.Request类中的doGetSession()方法来完成的。下面我们给出这个方法的代码片段:
Java代码
1.protected Session doGetSession(boolean create)
2.{
3. …
4. // Creating a new session cookie based on that session
5. if ((session != null) && (getContext() != null)
6. && getContext().getCookies())
7. {
8. Cookie cookie = new Cookie(Globals.SESSION_COOKIE_NAME,
9. session.getIdInternal());
10. configureSessionCookie(cookie);
11. response.addCookieInternal(cookie);
12. }
13.
14. if (session != null)
15. {
16. session.access();
17. return (session);
18. }
19. else
20. {
21. return (null);
22. }
23.}
24.
25.protected void configureSessionCookie(Cookie cookie)
26.{
27. cookie.setMaxAge(-1);
28. String contextPath = null;
29. if (!connector.getEmptySessionPath() && (getContext() != null))
30. {
31. contextPath = getContext().getEncodedPath();
32. }
33. if ((contextPath != null) && (contextPath.length() > 0))
34. {
35. cookie.setPath(contextPath);
36. }
37. else
38. {
39. cookie.setPath("/");
40. }
41. if (isSecure())
42. {
43. cookie.setSecure(true);
44. }
45.}
代码的第8行,我们看到非常熟悉的创建Cookie对象的代码,Cookie的名字是Globals.SESSION_ COOKIE_NAME,SESSION_COOKIE_NAME被定义为静态的常量,其值为JSESSIONID。Cookie的值是调用session.getIdInternal ()得到的Session ID。第10行,调用了configureSessionCookie()方法来配置会话Cookie。我们转到configureSessionCookie()方法中,第27行,调用Cookie对象的setMaxAge()方法设置Cookie的生存时间,在“使用Cookie的实例”的例子中,我们说过,如果时间值为负数,那么当客户端的浏览器退出,Cookie将会被删除。看到这儿,我们就知道了为什么会话Cookie只能保存在内存中了,这是由Tomcat的实现决定的。第35行,调用Cookie对象的setPath()方法,指定这个Cookie在当前Web应用程序的上下文路径下有效。
分享到:
相关推荐
在学习这些解决方案时,可以参考“Tomcat集群资料”中的文档,它们通常包含配置示例、最佳实践和常见问题解答,帮助你更好地理解和实施session共享策略。同时,理解负载均衡原理、分布式系统设计以及安全性问题也是...
1. 客户端cookie加密:通过自定义cookie机制来实现session,但只适合存储少量数据,如用户ID。 2. 应用服务器的session复制:Tomcat、JBoss、WebSphere等应用服务器支持session复制,但随着服务器数量增加,性能会...
当用户访问设置了cookie的网站时,浏览器会自动将cookie发送回服务器,从而实现了客户端的状态保持。虽然每个cookie的大小有限(通常4KB左右),但可以通过设置多个cookie来存储更多数据。 在上述代码示例中,我们...
- **Cookie管理**:当用户成功验证后,系统会在客户端设置一个会话cookie,这个cookie在后续请求中被用来保持登录状态。 为了实现SSO,还需要考虑以下方面: - **跨域问题**:如果各个应用部署在不同的域名下,...
每次请求时,客户端都会自动发送Cookie,服务器验证Token并恢复Session信息。这种方法简化了服务器的维护,有助于水平扩展。但缺点是Cookie有大小限制,可能不适合存储大量数据;同时,安全性依赖于客户端,如果...
标题中的“Memcached分布式缓存服务替换Session解决方案”是指一种使用Memcached作为分布式缓存来管理Web应用中的Session状态的方法,以替代传统的基于服务器端Session存储的策略。这种方案主要针对的是多服务器环境...
选择哪种Session解决方案取决于具体的应用场景、负载需求、安全性和可用资源。例如,小型应用可能更倾向于使用Session保持,而大型电商网站可能需要更复杂的Session共享或数据库存储方案。在设计解决方案时,还需要...
本文将探讨负载均衡集群中的三种主要会话解决方案:会话保持、会话复制和会话共享。 **会话保持** 是一种常见的策略,其目的是确保来自同一客户端的请求始终被路由到同一台后端服务器。这可以通过多种方式实现,...
服务器负载均衡解决方案是指通过合理地分配到多台服务器上的工作负载,以提高服务器的性能和可用性,解决单台服务器无法满足大量用户访问的性能要求。该解决方案可以提供廉价、有效、透明的方法来扩展网络设备和...
### JWT身份认证优缺点分析及常见问题解决方案 #### 一、JWT身份认证概述 JSON Web Token (JWT) 是一种开放标准 (RFC 7519),用于在各方之间以安全的方式传输信息。JWT 被设计成紧凑和安全的,特别适用于分布式...
WebLogic 和 F5 相结合的负载均衡配置方案 ...通过使用 BIG-IP 控制器和 WebLogic 服务器集群的联合解决方案,可以提高应用程序的可扩展性、可靠性和高可用性。该方案可以满足大型企业和组织对高性能和高可用性的需求。
网站负载均衡解决方案旨在确保高可用性和可扩展性,通过分散用户请求到多个服务器,避免单一服务器过载。本文主要探讨了反向代理负载均衡技术及其关键组件,包括Nginx的配置,以及如何处理session同步问题。 反向...
下面我们将详细探讨这些问题,并提供解决方案。 ### 问题 1:设置Cookie的有效期 设置Cookie的有效期通常通过`setcookie()`函数的第三个参数完成。这个参数是一个Unix时间戳,表示Cookie何时过期。如果不设置或者...
### 集群中几种session同步解决方案的比较 在分布式系统和集群环境中,session管理是一项关键技术,它确保了用户在不同服务器之间的交互能够保持一致性。本文将深入探讨六种常用的session共享方法,包括它们的工作...
本方案将详细探讨如何利用Nginx作为反向代理和负载均衡器,Tomcat作为应用服务器,以及Redis作为Session存储,实现负载均衡和Session粘滞的整套解决方案。 首先,Nginx是一款高性能的HTTP和反向代理服务器,它以其...
- Cookie存储功能不可用,这对会话管理提出了新的要求。 3. **架构模型**:基于以上两点,可以认为微信小程序更接近于传统的客户端-服务器(CS)架构。 #### 三、小程序与传统CS架构的对比 微信小程序在移动端运行...
解决方案是在设置Cookie时明确指定域和路径,确保它们一致。对于`currentMenuID`,你可以这样设置: ```javascript $.cookie("currentMenuID", "menuID", { path: "/", domain: document.domain }); ``` 这样...
本篇将深入探讨在垂直架构下,如何有效地管理和实现Session解决方案。 一、Session的基本概念 Session是Web应用中的一种会话管理机制,当用户登录成功后,服务器创建一个Session对象,并将用户的登录信息等关键数据...
在选择session同步解决方案时,应考虑系统的规模、可用性需求、性能要求以及安全性因素。不同的策略有各自的优缺点,需要根据具体业务场景进行权衡。在实际应用中,可能需要结合多种方法,以达到最佳的效果。
例如,可以使用F5的会话保持机制与服务器池技术相结合,以提供高可用性和高性能的负载均衡解决方案。 在实际应用中,F5会话保持机制可以应用于各种需要保持会话的场景,例如: * 电子商务平台:在电子商务平台中,...