pub enum Cookies<'a> {
// some variants omitted
}
Collection of one or more HTTP cookies.
The Cookies
type allows for retrieval of cookies from an incoming request
as well as modifications to cookies to be reflected by Rocket on outgoing
responses. Cookies
is a smart-pointer; it internally borrows and refers to
the collection of cookies active during a request's life-cycle.
A type of Cookies
can be retrieved via its FromRequest
implementation as
a request guard or via the Request::cookies
method. Individual cookies
can be retrieved via the get
and get_private
methods. Cookies can be
added or removed via the add
, add_private
, remove
, and
remove_private
methods.
The following short snippet shows Cookies
being used as a request guard in
a handler to retrieve the value of a "message" cookie.
use rocket::http::Cookies;
#[get("/message")]
fn message(cookies: Cookies) -> Option<String> {
cookies.get("message").map(|c| format!("Message: {}", c.value()))
}
The following snippet shows Cookies
being retrieved from a Request
in a
custom request guard implementation for User
. A private cookie
containing a user's ID is retrieved. If the cookie exists and the ID parses
as an integer, a User
structure is validated. Otherwise, the guard
forwards.
use rocket::http::Status;
use rocket::outcome::IntoOutcome;
use rocket::request::{self, Request, FromRequest};
struct User(usize);
impl<'a, 'r> FromRequest<'a, 'r> for User {
type Error = ();
fn from_request(request: &'a Request<'r>) -> request::Outcome<User, ()> {
request.cookies()
.get_private("user_id")
.and_then(|cookie| cookie.value().parse().ok())
.map(|id| User(id))
.or_forward(())
}
}
Private cookies are just like regular cookies except that they are
encrypted using authenticated encryption, a form of encryption which
simultaneously provides confidentiality, integrity, and authenticity. This
means that private cookies cannot be inspected, tampered with, or
manufactured by clients. If you prefer, you can think of private cookies as
being signed and encrypted.
Private cookies can be retrieved, added, and removed from a Cookies
collection via the get_private
, add_private
, and remove_private
methods.
To encrypt private cookies, Rocket uses the 256-bit key specified in the
secret_key
configuration parameter. If one is not specified, Rocket will
automatically generate a fresh key. Note, however, that a private cookie can
only be decrypted with the same key with which it was encrypted. As such, it
is important to set a secret_key
configuration parameter when using
private cookies so that cookies decrypt properly after an application
restart. Rocket will emit a warning if an application is run in production
mode without a configured secret_key
.
Generating a string suitable for use as a secret_key
configuration value
is usually done through tools like openssl
. Using openssl
, for instance,
a 256-bit base64 key can be generated with the command openssl rand -base64 32
.
Returns a reference to the Cookie
inside this container with the name
name
. If no such cookie exists, returns None
.
use rocket::http::Cookies;
fn handler(cookies: Cookies) {
let cookie = cookies.get("name");
}
Returns a reference to the Cookie
inside this collection with the name
name
and authenticates and decrypts the cookie's value, returning a
Cookie
with the decrypted value. If the cookie cannot be found, or the
cookie fails to authenticate or decrypt, None
is returned.
use rocket::http::Cookies;
fn handler(mut cookies: Cookies) {
let cookie = cookies.get_private("name");
}
Adds cookie
to this collection.
use rocket::http::{Cookie, Cookies};
fn handler(mut cookies: Cookies) {
cookies.add(Cookie::new("name", "value"));
let cookie = Cookie::build("name", "value")
.path("/")
.secure(true)
.finish();
cookies.add(cookie);
}
Adds cookie
to the collection. The cookie's value is encrypted with
authenticated encryption assuring confidentiality, integrity, and
authenticity. The cookie can later be retrieved using
get_private
and removed using
remove_private
.
If a path is not set on cookie
, the "/"
path will automatically be
set. If a SameSite
attribute is not set, the attribute will be set to
Strict
. These defaults ensure maximum usability and security. For
additional security, you may wish to set the http_only
flag.
use rocket::http::{Cookie, Cookies};
fn handler(mut cookies: Cookies) {
cookies.add_private(Cookie::new("name", "value"));
let mut cookie = Cookie::new("name", "value");
cookie.set_http_only(true);
cookies.add(cookie);
}
Removes cookie
from this collection and generates a "removal" cookies
to send to the client on response. For correctness, cookie
must
contain the same path
and domain
as the cookie that was initially
set. Failure to provide the initual path
and domain
will result in
cookies that are not properly removed.
A "removal" cookie is a cookie that has the same name as the original
cookie but has an empty value, a max-age of 0, and an expiration date
far in the past.
use rocket::http::{Cookie, Cookies};
fn handler(mut cookies: Cookies) {
cookies.remove(Cookie::named("name"));
}
Removes the private cookie
from the collection.
For correct removal, the passed in cookie
must contain the same path
and domain
as the cookie that was initially set. If a path is not set
on cookie
, the "/"
path will automatically be set.
use rocket::http::{Cookie, Cookies};
fn handler(mut cookies: Cookies) {
cookies.remove_private(Cookie::named("name"));
}
Returns an iterator over all of the cookies present in this collection.
use rocket::http::Cookies;
fn handler(cookies: Cookies) {
for c in cookies.iter() {
println!("Name: '{}', Value: '{}'", c.name(), c.value());
}
}
The associated error to be returned if derivation fails.
Derives an instance of Self
from the incoming request metadata. Read more
Formats the value using the given formatter. Read more
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)
Immutably borrows from an owned value. Read more
🔬 This is a nightly-only experimental API. (get_type_id
)
this method will likely be replaced by an associated static
🔬 This is a nightly-only experimental API. (try_from
)
The type returned in the event of a conversion error.
🔬 This is a nightly-only experimental API. (try_from
)
Mutably borrows from an owned value. Read more
Get the TypeId
of this object.