emsApplication/sdk/include/cgicc/HTTPCookie.h

370 lines
10 KiB
C
Raw Normal View History

2024-05-24 12:23:42 +08:00
/* -*-mode:c++; c-file-style: "gnu";-*- */
/*
* $Id: HTTPCookie.h,v 1.10 2014/04/23 20:55:07 sebdiaz Exp $
*
* Copyright (C) 1996 - 2004 Stephen F. Booth <sbooth@gnu.org>
* 2007 Sebastien DIAZ <sebastien.diaz@gmail.com>
* Part of the GNU cgicc library, http://www.gnu.org/software/cgicc
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
*/
#ifndef _HTTPCOOKIE_H_
#define _HTTPCOOKIE_H_ 1
#ifdef __GNUG__
# pragma interface
#endif
/*! \file HTTPCookie.h
* \brief An HTTP Cookie
*/
#include <string>
#include "MStreamable.h"
#include "CgiDefs.h"
namespace cgicc {
// ============================================================
// Class HTTPCookie
// ============================================================
/*! \class HTTPCookie HTTPCookie.h cgicc/HTTPCookie.h
* \brief An HTTP cookie
*
* An HTTP cookie is a way to maintain state between stateless HTTP
* requests. HTTP cookies consist of name/value pairs, with optional
* comments, domains, and expiration dates. Usually, you will add one
or more HTTPCookie objects to the HTTP headers your script is
* returning. For example, to set a cookie called \c count to \c 1 in
* a normal HTML document:
* \code
* out << HTTPHTMLHeader().setCookie(HTTPCookie("count","1"));
* \endcode
*/
class CGICC_API HTTPCookie : public MStreamable
{
public:
/*! \name Constructors and Destructor */
//@{
/*!
* \brief Default Constructor
*
* Create a new, empty HTTPCookie.
*/
HTTPCookie();
/*!
* \brief Create a new HTTPCookie
*
* This is the most commonly-used constructor.
* \param name The name of the cookie.
* \param value The value of the cookie.
*/
HTTPCookie(const std::string& name,
const std::string& value);
/*!
* \brief Create a new fully-spefified HTTPCookie
*
*
* \param name The name of the cookie.
* \param value The value of the cookie.
* \param comment Any comment associated with the cookie.
* \param domain The domain for which this cookie is valid- an empty string
* will use the hostname of the server which generated the cookie response.
* If specified, the domain <em>must</em> start with a period('.').
* \param maxAge A number of seconds defining the lifetime of this cookie.
* A value of \c 0 indicates the cookie expires immediately.
* \param path The subset of URLS in a domain for which the cookie is
* valid, for example \c /
* @param secure Specifies whether this is a secure cookie.
*/
HTTPCookie(const std::string& name,
const std::string& value,
const std::string& comment,
const std::string& domain,
unsigned long maxAge,
const std::string& path,
bool secure);
/*!
* \brief Copy constructor
*
* Set the name, value, comment, domain, age and path of this cookie
* to those of \c cookie
* \param cookie The HTTPCookie to copy.
*/
HTTPCookie(const HTTPCookie& cookie);
/*!
* \brief Destructor
*
* Delete this HTTPCookie
*/
virtual ~HTTPCookie();
//@}
// ============================================================
/*! \name Overloaded Operators */
//@{
/*!
* \brief Compare two HTTPCookies for equality.
*
* Two HTTPCookie objects are equal if their names, values,
* comments, domains, ages, and paths match.
* \param cookie The HTTPCookie to compare to this one
* \return true if the two HTTPCookies are equal, false otherwise.
*/
bool
operator== (const HTTPCookie& cookie) const;
/*!
* \brief Compare two HTTPCookies for inequality.
*
* Two HTTPCookie objects are equal if their names, values,
* comments, domains, ages, and paths match.
* \param cookie The HTTPCookie to compare to this one
* \return false if the two HTTPCookies are equal, true otherwise.
*/
inline bool
operator != (const HTTPCookie& cookie) const
{ return ! operator==(cookie); }
#ifdef WIN32
/* Dummy operator for MSVC++ */
inline bool
operator< (const HTTPCookie& cookie) const
{ return false; }
#endif
//@}
// ============================================================
/*! \name Accessor Methods */
//@{
/*!
* \brief Mark this cookie as secure or unsecure.
*
*/
inline void
remove()
{ fRemoved = true; }
/*!
* \brief Mark this cookie as secure or unsecure.
*
* \param removed Set removed status
*/
inline void
setRemoved(bool removed)
{ fRemoved = removed; }
/*!
* \brief Determine if this is a removed cookie.
*
* \return True if this cookie is removed, false if not.
*/
inline bool
isRemoved() const
{ return fRemoved; }
/*!
* \brief Create a new partially-spefified HTTPCookie for deletion
*
*
* \param name The name of the cookie.
* \param domain The domain for which this cookie is valid- an empty string
* will use the hostname of the server which generated the cookie response.
* If specified, the domain <em>must</em> start with a period('.').
* \param path The subset of URLS in a domain for which the cookie is
* valid, for example \c /
* @param secure Specifies whether this is a secure cookie.
*/
HTTPCookie(const std::string& name,
const std::string& domain,
const std::string& path,
bool secure);
/*!
* \brief Get the name of this cookie.
*
* \return The name of this cookie.
*/
inline std::string
getName() const
{ return fName; }
/*!
* \brief Get the value of this cookie.
*
* \return The value of this cookie.
*/
inline std::string
getValue() const
{ return fValue; }
/*!
* \brief Get the comment of this cookie.
*
* \return The comment of this cookie.
*/
inline std::string
getComment() const
{ return fComment; }
/*!
* \brief Get the domain for which this cookie is valid.
*
* An empty string indicates the hostname of the server which
* generated the cookie response.
* \return The domain of this cookie, or "" if none.
*/
inline std::string
getDomain() const
{ return fDomain; }
/*!
* \brief Get the lifetime of this cookie, in seconds.
*
* \return The lifetime of this cookie, or 0 if none.
*/
inline unsigned long
getMaxAge() const
{ return fMaxAge; }
/*!
* \brief Get the path of this cookie.
*
* This is the subset of URLS in a domain for which the cookie is
* valid, for example \c /
* \return The path of this cookie, or "" if none.
*/
inline std::string
getPath() const
{ return fPath; }
/*!
* \brief Determine if this is a secure cookie.
*
* \return True if this cookie is secure, false if not.
*/
inline bool
isSecure() const
{ return fSecure; }
//@}
// ============================================================
/*! \name Mutator Methods */
//@{
/*!
* \brief Set the name of this cookie.
*
* \param name The name of this cookie.
*/
inline void
setName(const std::string& name)
{ fName = name; }
/*!
* \brief Set the value of this cookie.
*
* \param value The value of this cookie.
*/
inline void
setValue(const std::string& value)
{ fValue = value; }
/*!
* \brief Set the comment of this cookie.
*
* \param comment The comment of this cookie.
*/
inline void
setComment(const std::string& comment)
{ fComment = comment; }
/*!
* \brief Set the domain of this cookie.
*
* An empty string indicates the hostname of the server which
* generated the cookie response. If specified, the domain
* <em>must</em> start with a period('.').
* \param domain The domain of this cookie.
*/
inline void
setDomain(const std::string& domain)
{ fDomain = domain; }
/*!
* \brief Set the lifetime of this cookie, in seconds.
*
* A value of \c 0 indicated the cookie expires immediately
* \param maxAge The lifetime of this cookie, in seconds.
*/
inline void
setMaxAge(unsigned long maxAge)
{ fMaxAge = maxAge; }
/*!
* \brief Set the path of this cookie.
*
* This is the subset of URLS in a domain for which the cookie is
* valid, for example \c /
* \param path The path of this cookie.
*/
inline void
setPath(const std::string& path)
{ fPath = path; }
/*!
* \brief Mark this cookie as secure or unsecure.
*
* \param secure Whether this is a secure cookie.
*/
inline void
setSecure(bool secure)
{ fSecure = secure; }
//@}
// ============================================================
/*! \name Inherited Methods */
//@{
virtual void
render(std::ostream& out) const;
//@}
private:
std::string fName;
std::string fValue;
std::string fComment;
std::string fDomain;
unsigned long fMaxAge;
std::string fPath;
bool fSecure;
bool fRemoved;
};
} // namespace cgicc
#endif /* ! _HTTPCOOKIE_H_ */