⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servercookie.java

📁 Tomcat 4.1与WebServer集成组件的源代码包.
💻 JAVA
字号:
/* * The Apache Software License, Version 1.1 * * Copyright (c) 1999 The Apache Software Foundation.  All rights  * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer.  * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. The end-user documentation included with the redistribution, if *    any, must include the following acknowlegement:   *       "This product includes software developed by the  *        Apache Software Foundation (http://www.apache.org/)." *    Alternately, this acknowlegement may appear in the software itself, *    if and wherever such third-party acknowlegements normally appear. * * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software *    Foundation" must not be used to endorse or promote products derived *    from this software without prior written permission. For written *    permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" *    nor may "Apache" appear in their names without prior written *    permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation.  For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. * * ==================================================================== */package org.apache.tomcat.util.http;import org.apache.tomcat.util.buf.MessageBytes;import org.apache.tomcat.util.buf.DateTool;import java.text.*;import java.io.*;import java.util.*;/** *  Server-side cookie representation. *   Allows recycling and uses MessageBytes as low-level *  representation ( and thus the byte-> char conversion can be delayed *  until we know the charset ). * *  Tomcat.core uses this recyclable object to represent cookies, *  and the facade will convert it to the external representation. */public class ServerCookie implements Serializable {    private MessageBytes name=MessageBytes.newInstance();    private MessageBytes value=MessageBytes.newInstance();    private MessageBytes comment=MessageBytes.newInstance();    // ;Comment=VALUE    private MessageBytes domain=MessageBytes.newInstance();    // ;Domain=VALUE ...    private int maxAge = -1;	// ;Max-Age=VALUE				// ;Discard ... implied by maxAge < 0    // RFC2109: maxAge=0 will end a session    private MessageBytes path=MessageBytes.newInstance();	// ;Path=VALUE .    private boolean secure;	// ;Secure    private int version = 0;	// ;Version=1    //XXX CommentURL, Port -> use notes ?        public ServerCookie() {    }    public void recycle() {        path.recycle();    	name.recycle();    	value.recycle();    	comment.recycle();    	maxAge=-1;    	path.recycle();        domain.recycle();    	version=0;    	secure=false;    }    public MessageBytes getComment() {	return comment;    }    public MessageBytes getDomain() {	return domain;    }    public void setMaxAge(int expiry) {	maxAge = expiry;    }    public int getMaxAge() {	return maxAge;    }    public MessageBytes getPath() {	return path;    }    public void setSecure(boolean flag) {	secure = flag;    }    public boolean getSecure() {	return secure;    }    public MessageBytes getName() {	return name;    }    public MessageBytes getValue() {	return value;    }    public int getVersion() {	return version;    }    public void setVersion(int v) {	version = v;    }    // -------------------- utils --------------------    public String toString() {	return "Cookie " + getName() + "=" + getValue() + " ; "	    + getVersion() + " " + getPath() + " " + getDomain();    }        // Note -- disabled for now to allow full Netscape compatibility    // from RFC 2068, token special case characters    //    // private static final String tspecials = "()<>@,;:\\\"/[]?={} \t";    private static final String tspecials = ",;";    /*     * Tests a string and returns true if the string counts as a     * reserved token in the Java language.     *     * @param value		the <code>String</code> to be tested     *     * @return			<code>true</code> if the <code>String</code> is     *				a reserved token; <code>false</code>     *				if it is not     */    public static boolean isToken(String value) {	if( value==null) return true;	int len = value.length();	for (int i = 0; i < len; i++) {	    char c = value.charAt(i);	    if (c < 0x20 || c >= 0x7f || tspecials.indexOf(c) != -1)		return false;	}	return true;    }    public static boolean checkName( String name ) {	if (!isToken(name)		|| name.equalsIgnoreCase("Comment")	// rfc2019		|| name.equalsIgnoreCase("Discard")	// 2019++		|| name.equalsIgnoreCase("Domain")		|| name.equalsIgnoreCase("Expires")	// (old cookies)		|| name.equalsIgnoreCase("Max-Age")	// rfc2019		|| name.equalsIgnoreCase("Path")		|| name.equalsIgnoreCase("Secure")		|| name.equalsIgnoreCase("Version")	    ) {	    return false;	}	return true;    }    // -------------------- Cookie parsing tools        /** Return the header name to set the cookie, based on cookie     *  version     */    public String getCookieHeaderName() {	return getCookieHeaderName(version);    }    /** Return the header name to set the cookie, based on cookie     *  version     */    public static String getCookieHeaderName(int version) {	if( dbg>0 ) log( (version==1) ? "Set-Cookie2" : "Set-Cookie");        if (version == 1) {	    // RFC2109	    return "Set-Cookie";	    // XXX RFC2965 is not standard yet, and Set-Cookie2	    // is not supported by Netscape 4, 6, IE 3, 5 .	    // It is supported by Lynx, and there is hope 	    //	    return "Set-Cookie2";        } else {	    // Old Netscape	    return "Set-Cookie";        }    }    private static final String ancientDate=DateTool.formatOldCookie(new Date(10000));    public static void appendCookieValue( StringBuffer buf,					  int version,					  String name,					  String value,					  String path,					  String domain,					  String comment,					  int maxAge,					  boolean isSecure )    {        // this part is the same for all cookies	buf.append( name );        buf.append("=");        maybeQuote(version, buf, value);	// XXX Netscape cookie: "; " 	// add version 1 specific information	if (version == 1) {	    // Version=1 ... required	    buf.append ("; Version=1");	    // Comment=comment	    if ( comment!=null ) {		buf.append ("; Comment=");		maybeQuote (version, buf, comment);	    }	}		// add domain information, if present	if (domain!=null) {	    buf.append("; Domain=");	    maybeQuote (version, buf, domain);	}	// Max-Age=secs/Discard ... or use old "Expires" format	if (maxAge >= 0) {	    if (version == 0) {		// XXX XXX XXX We need to send both, for		// interoperatibility (long word )		buf.append ("; Expires=");		// Wdy, DD-Mon-YY HH:MM:SS GMT ( Expires netscape format )		// To expire we need to set the time back in future		// ( pfrieden@dChain.com )                if (maxAge == 0)		    buf.append( ancientDate );		else                    DateTool.formatOldCookie                        (new Date( System.currentTimeMillis() +                                   maxAge *1000L), buf,                         new FieldPosition(0));	    } else {		buf.append ("; Max-Age=");		buf.append (maxAge);	    }	}	// Path=path	if (path!=null) {	    buf.append ("; Path=");	    maybeQuote (version, buf, path);	}	// Secure	if (isSecure) {	  buf.append ("; Secure");	}		    }    public static void maybeQuote (int version, StringBuffer buf,                                    String value)    {	// special case - a \n or \r  shouldn't happen in any case	if ( isToken (value))	  buf.append (value);	else {	    if(version==0)		throw new IllegalArgumentException( value );	    else {		buf.append ('"');		buf.append (value);		buf.append ('"');	    }	}    }    // log    static final int dbg=1;    public static void log(String s ) {	System.out.println("ServerCookie: " + s);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -