diff options
Diffstat (limited to '_build/static/docs/en/cowboy/1.0/guide/cookies/index.html')
-rw-r--r-- | _build/static/docs/en/cowboy/1.0/guide/cookies/index.html | 273 |
1 files changed, 273 insertions, 0 deletions
diff --git a/_build/static/docs/en/cowboy/1.0/guide/cookies/index.html b/_build/static/docs/en/cowboy/1.0/guide/cookies/index.html new file mode 100644 index 00000000..fd9e0519 --- /dev/null +++ b/_build/static/docs/en/cowboy/1.0/guide/cookies/index.html @@ -0,0 +1,273 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>Nine Nines Support: Cowboy User Guide</title> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <!-- Change them or set them up as you like --> + <meta name="description" content=""> + <meta name="author" content="(Soft10) Pol Cámara"> + + <!-- Stylesheets --> + <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,700,400italic' rel='stylesheet' type='text/css'> + <link href="/css/bootstrap.min.css" rel="stylesheet"> + <link href="/css/99s.css" rel="stylesheet"> +<!-- <link href="js/google-code-prettify/prettify.css" rel="stylesheet"> --> + <link href="/css/sh99s.css" rel="stylesheet"/> + + <!-- Enables html5 support on older browsers, other js is placed at the end of the page to speed up loading --> + <!--[if lt IE 9]> + <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> + <![endif]--> + + <link rel="shortcut icon" href="/img/ico/favicon.ico"> + <link rel="apple-touch-icon-precomposed" sizes="114x114" href="/img/ico/apple-touch-icon-114.png"> + <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/img/ico/apple-touch-icon-72.png"> + <link rel="apple-touch-icon-precomposed" href="/img/ico/apple-touch-icon-57.png"> + <link rel="alternate" href="/feeds/atom.xml" type="application/atom+xml" title="Nine Nines Atom Feed"> + </head> + + <body class="big_text docs"> + <header id="page-head"> + <div id="topbar" class="container"> + <div class="row"> + <div class="span2"> + <h1 id="logo"><a href="/" title="99s">99s</a></h1> + </div> + <div class="span10"> + <!-- Top navigation and social icons--> + <div id="side-header"> + <nav> + <ul> + <li><a title="Erlang training" href="/training">Training</a></li> + <li><a title="Technical publications" href="/articles">Articles</a></li> + <li><a title="Our talks" href="/talks">Talks</a></li> + <li class="active"><a title="Our services" href="/support">Pricing & Sponsoring</a></li> + <li><a title="Community support" href="http://lists.ninenines.eu">Mailing Lists</a></li> + <li><a title="Contact us" href="mailto:[email protected]">Contact</a></li> + </ul> + </nav> + <ul id="social"> + <li> + <a href="https://github.com/ninenines" title="Check our Github repositories"><img src="/img/ico_github.png" data-hover="/img/ico_github_alt.png" alt="Github"></a> + </li> + <li class="dropdown" id="twitter-links"> + <a href="#twitter-links" class="dropdown-toggle" data-toggle="dropdown" title="Follow us on Twitter"> + <img src="/img/ico_twitter.png" data-hover="/img/ico_twitter_alt.png" alt="Twitter"> + </a> + <ul class="dropdown-menu"> + <li><a title="Visit Loïc Hoguin's Twitter Account" href="http://twitter.com/lhoguin">@lhoguin</a></li> + <!-- <li class="divider"></li> + <li><a title="Visit our official Twitter account" href="#">@99s</a></li> --> + </ul> + </li> + <!-- <li> + <a href="/css/" title="Add us on Linkedin"><img src="/img/ico_linkedin.png" data-hover="img/ico_linkedin_alt.png" alt="Linkedin"></a> + </li> --> + </ul> + </div> + </div> + </div> + </div> + + + </header> + + +<div id="contents" class="two_col"> +<div class="container"> +<div class="row"> +<div id="docs" class="span9 maincol"> + +<h1 class="lined-header"><span>Using cookies</span></h1> + +<p>Cookies are a mechanism allowing applications to maintain state on top of the stateless HTTP protocol.</p> + +<p>Cowboy provides facilities for handling cookies. It is highly recommended to use them instead of writing your own, as the implementation of cookies can vary greatly between clients.</p> + +<p>Cookies are stored client-side and sent with every subsequent request that matches the domain and path for which they were stored, including requests for static files. For this reason they can incur a cost which must be taken in consideration.</p> + +<p>Also consider that, regardless of the options used, cookies are not to be trusted. They may be read and modified by any program on the user's computer, but also by proxies. You should always validate cookie values before using them. Do not store any sensitive information in cookies either.</p> + +<p>When explicitly setting the domain, the cookie will be sent for the domain and all subdomains from that domain. Otherwise the current domain will be used. The same is true for the path.</p> + +<p>When the server sets cookies, they will only be available for requests that are sent after the client receives the response.</p> + +<p>Cookies are sent in HTTP headers, therefore they must have text values. It is your responsibility to encode any other data type. Also note that cookie names are de facto case sensitive.</p> + +<p>Cookies can be set for the client session (which generally means until the browser is closed), or it can be set for a number of seconds. Once it expires, or when the server says the cookie must exist for up to 0 seconds, the cookie is deleted by the client. To avoid this while the user is browsing your site, you should set the cookie for every request, essentially resetting the expiration time.</p> + +<p>Cookies can be restricted to secure channels. This typically means that such a cookie will only be sent over HTTPS, and that it will only be available by client-side scripts that run from HTTPS webpages.</p> + +<p>Finally, cookies can be restricted to HTTP and HTTPS requests, essentially disabling their access from client-side scripts.</p> + +<h2 id="setting_cookies">Setting cookies</h2> + +<p>By default, cookies you set are defined for the session.</p> + +<script type="syntaxhighlighter" class="brush: erlang"><![CDATA[ +SessionID = generate_session_id(), +Req2 = cowboy_req:set_resp_cookie(<<"sessionid">>, SessionID, [], Req). +]]></script> + +<p>You can also make them expire at a specific point in the future.</p> + +<script type="syntaxhighlighter" class="brush: erlang"><![CDATA[ +SessionID = generate_session_id(), +Req2 = cowboy_req:set_resp_cookie(<<"sessionid">>, SessionID, [ + {max_age, 3600} +], Req). +]]></script> + +<p>You can delete cookies that have already been set. The value is ignored.</p> + +<script type="syntaxhighlighter" class="brush: erlang"><![CDATA[ +Req2 = cowboy_req:set_resp_cookie(<<"sessionid">>, <<>>, [ + {max_age, 0} +], Req). +]]></script> + +<p>You can restrict them to a specific domain and path. For example, the following cookie will be set for the domain <code>my.example.org</code> and all its subdomains, but only on the path <code>/account</code> and all its subdirectories.</p> + +<script type="syntaxhighlighter" class="brush: erlang"><![CDATA[ +Req2 = cowboy_req:set_resp_cookie(<<"inaccount">>, <<"1">>, [ + {domain, "my.example.org"}, + {path, "/account"} +], Req). +]]></script> + +<p>You can restrict the cookie to secure channels, typically HTTPS.</p> + +<script type="syntaxhighlighter" class="brush: erlang"><![CDATA[ +SessionID = generate_session_id(), +Req2 = cowboy_req:set_resp_cookie(<<"sessionid">>, SessionID, [ + {secure, true} +], Req). +]]></script> + +<p>You can restrict the cookie to client-server communication only. Such a cookie will not be available to client-side scripts.</p> + +<script type="syntaxhighlighter" class="brush: erlang"><![CDATA[ +SessionID = generate_session_id(), +Req2 = cowboy_req:set_resp_cookie(<<"sessionid">>, SessionID, [ + {http_only, true} +], Req). +]]></script> + +<p>Cookies may also be set client-side, for example using Javascript.</p> + +<h2 id="reading_cookies">Reading cookies</h2> + +<p>As we said, the client sends cookies with every request. But unlike the server, the client only sends the cookie name and value.</p> + +<p>You can read the value of a cookie.</p> + +<script type="syntaxhighlighter" class="brush: erlang"><![CDATA[ +{CookieVal, Req2} = cowboy_req:cookie(<<"lang">>, Req). +]]></script> + +<p>You can also get a default value returned when the cookie isn't set.</p> + +<script type="syntaxhighlighter" class="brush: erlang"><![CDATA[ +{CookieVal, Req2} = cowboy_req:cookie(<<"lang">>, Req, <<"fr">>). +]]></script> + +<p>And you can obtain all cookies at once as a list of key/value tuples.</p> + +<script type="syntaxhighlighter" class="brush: erlang"><![CDATA[ +{AllCookies, Req2} = cowboy_req:cookies(Req). +]]></script> + + +<!-- a.code --> +</div> + +<div class="span3 sidecol"> +<div class="input-append"> +<form id="form-search" class="form-search" action="#"> + <input id="input-search" type="text" placeholder="Function search" autocomplete="off" autofocus class="input-medium search-query span2"> + <button type="submit" class="btn btn-success">Go</button> +</form> +</div> + +<h3 id="docs-nav">Navigation</h3> + +<h3>See also</h3><ul><li><a href="/docs/en/cowboy/1.0/manual/">Function Reference</a></li><li><a href="/docs/en/cowboy/1.0/index.html">README</a></li></ul> + +<h3>Version select</h3> +<ul> + + <li><a href="/docs/en/cowboy/1.0/guide/"><strong>1.0</strong></a></li> + + <li><a href="/docs/en/cowboy/HEAD/guide/"><strong>HEAD</strong></a></li> + +</ul> + +</div> +</div> +</div> +</div> + + + <footer> + <div class="container"> + <div class="row"> + <div class="span6"> + <p id="scroll-top"><a href="#">↑ Scroll to top</a></p> + <nav> + <ul> + <li><a href="mailto:[email protected]" title="Contact us">Contact us</a></li><li><a href="https://github.com/ninenines/ninenines.github.io" title="Github repository">Contribute to this site</a></li> + </ul> + </nav> + </div> + <div class="span6 credits"> + <p><img src="/img/footer_logo.png"></p> + <p>Copyright © Nine Nines 2012-2014</p> + </div> + </div> + </div> + </footer> + + <!-- Javascript --> + <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> + <script src="/js/bootstrap-carousel.js"></script> + <script src="/js/bootstrap-dropdown.js"></script> + <script src="/js/custom.js"></script> + + +<script type="text/javascript" src="/js/shCore.js"></script> +<script type="text/javascript" src="/js/shlang/shBrushBash.js"></script> +<script type="text/javascript" src="/js/shlang/shBrushErlang.js"></script> +<script type="text/javascript" src="/js/shlang/shBrushJScript.js"></script> +<script type="text/javascript" src="/js/shlang/shBrushPlain.js"></script> +<script type="text/javascript">SyntaxHighlighter.all();</script> + +<script type="text/javascript" src="/js/fuse.min.js"></script> +<script type="text/javascript"> +$(document).ready(function(){ + var f; + + $.getJSON("/docs/db.json", function(data){ + f = new Fuse(data, {keys: ["n"], threshold: 0.3}); + $("<ul id=\"search-results\">").insertAfter("#form-search"); + }); + + $("#input-search").keyup(function(e){if(f){if (e.which != 13 ){ + var results = f.search($(this).val()); + if (results.length == 0){ + $("#form-search").attr("action", "#"); + }else{ + $("#form-search").attr("action", results[0].l); + } + + $("#search-results").empty(); + for (var i = 0; i < 10 && i < results.length; i++){ + $("<li><a href=\"" + results[i].l + "\">" + results[i].n + "</a></li>") + .appendTo("#search-results"); + } + }}}); +}); +</script> + + </body> +</html> |