`
sagahl
  • 浏览: 24000 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论
阅读更多

HttpServletRequest中得到的cookies除了name和value没有别的,别指望还有什么超时信息和路径。凭什么传给你?浪费带宽。

 

作废cookies不要从HttpServletRequest拿到cookies设置一个有效时间为0就可以,有的浏览器需要详细信息,否则不能生效,但是HttpServletRequest中得到的cookies是没有的。

 

cookies写入HttpServletResponse要在HttpServletResponse调用flush方法前,或在自动的flush前。因为浏览器接受数据是顺序的,head数据在body数据前。flush后数据就送出去了,再写head没有用了。

 

HttpServletResponse什么时候flush?那要看容器了,tomcat可以在server.xml文件中配置的,具体见:http://tomcat.apache.org/tomcat-6.0-doc/config/http.html

 


The size (in bytes) of the buffer to be provided for input streams created by this connector. By default, buffers of 2048 bytes will be provided.
 

HttpServletResponse.sendRedirect(),HttpServletResponse.sendError(),

HttpServletResponse.flushBuffer(), PrintWriter.flush(), ServletOutputStream.flush(),会主动flush response或提交response。这个时候就无法写入cookie了。

 

cookie在浏览器中的数量和大小取决于浏览器,但是记住cookies的名字也算长度的。
两种输出方式:printwrite和ServletOutputStream都是有大小限制的,都可能自动flush,flush后都无法再写head。但是printwrite可以设置是否自动flush。
httponly根本不是w3c规范,是微软的,所以2.4以前的中没有,你可以自己加上这个参数。
Secure表示只有https的才能读取这个cookie。
以下的代码可以理解cookies变成head的过程:
    /**
     * Return the header name to set the cookie, based on cookie version.
     */
    public static String getCookieHeaderName(int version) {
        // TODO Re-enable logging when RFC2965 is implemented
        // log( (version==1) ? "Set-Cookie2" : "Set-Cookie");
        if (version == 1) {
            // XXX RFC2965 not referenced in Servlet Spec
            // Set-Cookie2 is not supported by Netscape 4, 6, IE 3, 5
            // Set-Cookie2 is supported by Lynx and Opera
            // Need to check on later IE and FF releases but for now...
            // RFC2109
            return "Set-Cookie";
            // return "Set-Cookie2";
        } else {
            // Old Netscape
            return "Set-Cookie";
        }
    }

    // TODO RFC2965 fields also need to be passed
    public static void appendCookieValue(StringBuilder buf, int version, String name, String value, String path,
                                         String domain, String comment, int maxAge, boolean isSecure, boolean isHttpOnly) {
        // Servlet implementation checks name
        buf.append(name);
        buf.append("=");
        // Servlet implementation does not check anything else

        version = maybeQuote2(version, buf, value, true);

        // Add version 1 specific information
        if (version == 1) {
            // Version=1 ... required
            buf.append("; Version=1");

            // Comment=comment
            if (comment != null) {
                buf.append("; Comment=");
                maybeQuote2(version, buf, comment);
            }
        }

        // Add domain information, if present
        if (domain != null) {
            buf.append("; Domain=");
            maybeQuote2(version, buf, domain);
        }

        // Max-Age=secs ... or use old "Expires" format
        if (maxAge >= 0) {
            if (version > 0) {
                buf.append("; Max-Age=");
                buf.append(maxAge);
            }

            // IE6, IE7 and possibly other browsers don't understand Max-Age.
            // They do understand Expires, even with V1 cookies!
            if (version == 0 || ALWAYS_ADD_EXPIRES) {
                // Wdy, DD-Mon-YY HH:MM:SS GMT ( Expires Netscape format )
                buf.append("; Expires=");
                // To expire immediately we need to set the time in past
                if (maxAge == 0) {
                    buf.append(ancientDate);
                } else {
                    buf.append(OLD_COOKIE_FORMAT.get().format(new Date(System.currentTimeMillis() + maxAge * 1000L)));
                }
            }
        } else {
            // RFC2965 Discard
            if (version > 0) {
                buf.append("; Discard");
            }
        }

        // Path=path
        if (path != null) {
            buf.append("; Path=");
            if (version == 0) {
                maybeQuote2(version, buf, path);
            } else {
                maybeQuote2(version, buf, path, ServerCookie.tspecials2NoSlash, false);
            }
        }

        // Secure
        if (isSecure) {
            buf.append("; Secure");
        }

        // HttpOnly
        if (isHttpOnly) {
            buf.append("; HttpOnly");
        }
    }
 暂时记得这么多,以后想起什么再加。
分享到:
评论

相关推荐

    JS操作COOKIE实现备忘记录的方法

    本文实例讲述了JS操作COOKIE实现备忘记录的方法。分享给大家供大家参考,具体如下: 具体涉及JS针对cookie的写入与获取操作,代码如下: function getCookie(c_name) { if ([removed].length > 0) { c_start = ...

    ASP源码—歪歪网络备忘录源码.zip

    1. **Request对象**:此对象允许开发者访问HTTP请求中的各种数据,如查询字符串、表单数据、cookies和HTTP头信息。在备忘录系统中,可能使用Request对象来获取用户的登录信息、创建备忘录的文本以及其他可能的参数。...

    基于jQuery实现的带备忘录功能的日期选择器特效源码.zip

    实现这一功能可能需要结合本地存储(localStorage)或cookies来保存用户的备忘信息。每当用户选择一个日期,程序会检查本地存储中是否存在与之关联的备忘,并在日期选择器的界面上以适当的方式展示出来,比如在日期...

    ASP实例开发源码-歪歪网络备忘录源码 asp版.zip

    “歪歪网络备忘录源码 asp版.zip”很可能是一个基于ASP的简单备忘录应用,它可能包含了用户登录、创建备忘、查看备忘、删除备忘等功能。开发者可能使用了Session对象来跟踪用户登录状态,并通过数据库操作来存储和...

    vbscript 备忘录

    5. 数据存储:可能使用了浏览器的本地存储机制(如cookies、localStorage或sessionStorage)来保存备忘录数据。 6. 异步通信:可能利用了XMLHttpRequest对象进行AJAX请求,与服务器交换数据。 7. 图像操作:VBScript...

    Python_OWASP备忘单系列的创建是为了提供关于特定应用程序安全主题的高价值信息的简明集合.zip

    9. 安全的HTTP头部:设置HTTP Only标志,防止跨站脚本攻击窃取cookies。使用HSTS(HTTP Strict Transport Security)强制使用HTTPS连接。 10. 日志记录:记录应用程序中的异常和安全事件,以便分析和响应潜在威胁。...

    filterbypass:浏览器的XSS筛选器旁路备忘单

    4. **HTTP-only cookies**:使用HTTP-only标志保护敏感的Cookie信息,使其无法通过JavaScript访问。 5. **X-XSS-Protection**:启用并正确配置HTTP响应头`X-XSS-Protection`,提高浏览器的防护能力。 6. **最新安全...

    web 服务器 介绍

    * 行为型模式:观察者模式、策划模式、模板方法模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式 jQuery 是一个轻量级的 JavaScript 框架,提供了各种 API 简化...

    安全开发 - 安全技术资料汇总(共4份).zip

    这份备忘录将提供深入的XSS防御策略,包括输入验证、输出编码、HTTPOnly cookies的使用,以及Content Security Policy(CSP)的配置等,以保护用户免受钓鱼、会话劫持和其他恶意活动的侵害。 综上所述,这些资料为...

    interview success kit

    该工具包由58位主题专家共同编写,旨在提供一个全面的面试备忘单,覆盖了广泛的.NET知识和技能点。 - **免费版预览**与**完整版对比**:免费版提供了部分面试题及其解答,而完整版则包含了9000多道面试题目与答案...

    Documents and Settings\Administrator\桌面\dfghdfh.txt

    由于提供的部分内容“sdfsafsfdsgfsdg”无法解读出具体信息,我们只能推测这是一个普通的文本文件,可能包含了一些文字信息或者是某个项目的备忘录。 ### 文件操作与管理 对于Windows系统中的文件操作,用户可以...

    漂亮的国产Linux操作系统Open Desktop赏析

    用户可以使用“自动文件助理”,包含了信函、传真、会议议程、备忘录、演示文稿、网页、表单等组件,使用一个程序即可处理多种格式的文档。 2. 网页浏览与配置 系统采用了基于Mozilla的GNOME界面的Epiphany浏览器...

    橄榄部落PLUS v1.0

    仿4.0清除Cookies功能 22.添加 BOX 文字底色快捷菜单 23.添加批量高亮功能 24.仿 D4 会员精华帖统计 25.优化显示 26.仿 D4 会员精华帖统计及仿4.0精华区加入搜索作者 27.HACK名称: 在线...

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

    超级有影响力的Java面试题大全文档 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。...

Global site tag (gtag.js) - Google Analytics