`
guoqingcun
  • 浏览: 53213 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

客户端cookie不可用时,解决方案

阅读更多

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应用程序的上下文路径下有效。

分享到:
评论

相关推荐

    ASP.NET的网页代码模型及生命周期

    在客户端浏览器访问该页面时,浏览器会给IIS发送请求消息,IIS则会开始执行ASP.NET编译过程,如果不存在编译过后的DLL文件,则加载编译的类并创建对象。当创建对象完成,生成创建对象后的代码并生成一个ASPX页面代码...

    回听「Listening Back」-crx插件

    此解决方案要求每个网站的服务器在每个访问者的计算机上放置一个小文件,以跟踪访问者在该站点上的操作。 Internet cookie使Web服务器可以跟踪用户的浏览活动,从而为Web提供了存储空间,并且首次为在线自动数据收集...

    Fourinone分布式计算框架

    另外,基于FourInOne可以轻松实现web应用的session功能,只需要将生成的key写入客户端cookie即可。 FourInOne对于分布式大数据量并行计算的解决方案不同于复杂的hadoop,它不像hadoop的中间计算结果依赖于hdfs,它...

    KODExplorer 芒果云-资源管理器

    - 选中文件时,移动到屏幕可视区域(解决上下左右选中文件滚动条不一致问题) ###ver2.51 `2014/6/22` ---- ####fix bug:(bug解决和程序优化) - 登陆多次密码输入错误验证码bug解决 - 修复漏洞:创建副本加入...

    PHP和MySQL WEB开发(第4版)

    2.4.4 解决打开文件时可能遇到的问题 2.5 写文件 2.5.1 fwrite()的参数 2.5.2 文件格式 2.6 关闭文件 2.7 读文件 2.7.1 以只读模式打开文件:fopen() 2.7.2 知道何时读完文件:feof() 2.7.3 每次读取一行数据:fgets...

    Fourinone分布式并行计算四合一框架

    另外,基于Fourinone可以轻松实现web应用的session功能,只需要将生成的key写入客户端cookie即可。  Fourinone对于分布式大数据量并行计算的解决方案不同于复杂的hadoop,它不像hadoop的中间计算结果依赖于hdfs,...

    PHP和MySQL Web开发第4版pdf以及源码

    2.4.4 解决打开文件时可能遇到的问题 2.5 写文件 2.5.1 fwrite()的参数 2.5.2 文件格式 2.6 关闭文件 2.7 读文件 2.7.1 以只读模式打开文件:fopen() 2.7.2 知道何时读完文件:feof() 2.7.3 每次读取一行...

    PHP和MySQL Web开发第4版

    2.4.4 解决打开文件时可能遇到的问题 2.5 写文件 2.5.1 fwrite()的参数 2.5.2 文件格式 2.6 关闭文件 2.7 读文件 2.7.1 以只读模式打开文件:fopen() 2.7.2 知道何时读完文件:feof() 2.7.3 每次读取一行...

    fourinone-3.04.25

    另外,基于Fourinone可以轻松实现web应用的session功能,只需要将生成的key写入客户端cookie即可。 Fourinone对于分布式大数据量并行计算的解决方案不同于复杂的hadoop,它不像hadoop的中间计算结果依赖于hdfs,它...

    超级有影响力霸气的Java面试题大全文档

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。  Servlet被服务器实例化后,容器运行其init方法...

    asp.net知识库

    一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标放在一个连接上,会显示图片(类似tooltip) 使用microsoft.web.ui.webcontrols的TabStrip与...

    RouterOS2.9.6.with.crack及配置动画

    这些隧道协议可以为远程资源访问和企业间的连接提供很好的解决方案,如: l 通过PPTP或IPIP实现通网络资源互用 l EoIP或PPTP的远程局域网解决方案 l 支持PPPoE服务器 l Hotspot热点认证服务 热点服务认证系统是一种...

    java 面试题 总结

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,...

    网站分析-如何做数据分析.pptx

    基于Web服务器日志收集 由服务器端自动生成,成本小,缺点在于处理数据与提取需要的用户的数据源复杂,且交互式 Tag PK Logfile Tag不受动态IP地址或代理服务器的影响,通过客户端跟踪技术处理并记录cookie Tag能...

    深入Java Servlet网络编程

    2 基于Java解决方案的特点 第2章 Java Servlet简介 2. 1 Servlet生命周期 2. 2 Java Servlet API简介 2. 3 处理表单和返回数据的实例 2. 4 错误处理和日志记录 2. 4. 1 Java中的异常处理机制 2. 4. 2 在Java...

    C#编程经验技巧宝典

    2 <br>0003 设置程序代码行序号 3 <br>0004 开发环境全屏显示 3 <br>0005 设置窗口的自动隐藏功能 3 <br>0006 根据需要创建所需解决方案 4 <br>0007 如何使用“验证的目标架构”功能 4 ...

    驱动精灵(可以备份驱动,也可以升级驱动)

    3、主界面新增事务区,事务区可显示驱动与设备的状态及相应的解决方案。 4、针对不同用户需求,2011版本提供三种驱动支持模式,分别是标准模式、玩家模式与向导模式。 5、驱动更新标准模式全新强化,一目了然解决...

Global site tag (gtag.js) - Google Analytics