0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 12:20:24 +00:00

Add cookie example

This commit is contained in:
Loïc Hoguin 2012-12-20 14:40:22 +01:00
parent 659ca05c54
commit a07d063fd8
10 changed files with 159 additions and 0 deletions

View file

@ -4,6 +4,8 @@ Cowboy Examples
* [chunked_hello_world](./examples/chunked_hello_world): * [chunked_hello_world](./examples/chunked_hello_world):
demonstrates chunked data transfer with two one-second delays demonstrates chunked data transfer with two one-second delays
* [cookie](./examples/cookie):
set cookies from server and client side
* [echo_get](./examples/echo_get): * [echo_get](./examples/echo_get):
parse and echo a GET query string parse and echo a GET query string

18
examples/cookie/README.md Normal file
View file

@ -0,0 +1,18 @@
Cowboy Cookie
=============
To compile this example you need rebar in your PATH.
Type the following command:
```
$ rebar get-deps compile
```
You can then start the Erlang node with the following command:
```
./start.sh
```
Then point your browser to the indicated URL. This example allows
you to use any path you want to try to show that cookies are defined
site-wide. Try it in your browser!

View file

@ -0,0 +1,6 @@
{deps, [
{cowboy, ".*",
{git, "git://github.com/extend/cowboy.git", "master"}},
{erlydtl, ".*",
{git, "https://github.com/evanmiller/erlydtl.git", "master"}}
]}.

View file

@ -0,0 +1,15 @@
%% Feel free to use, reuse and abuse the code in this file.
{application, cookie, [
{description, "Cowboy Cookie example."},
{vsn, "1"},
{modules, []},
{registered, []},
{applications, [
kernel,
stdlib,
cowboy
]},
{mod, {cookie_app, []}},
{env, []}
]}.

View file

@ -0,0 +1,14 @@
%% Feel free to use, reuse and abuse the code in this file.
-module(cookie).
%% API.
-export([start/0]).
%% API.
start() ->
ok = application:start(crypto),
ok = application:start(ranch),
ok = application:start(cowboy),
ok = application:start(cookie).

View file

@ -0,0 +1,25 @@
%% Feel free to use, reuse and abuse the code in this file.
%% @private
-module(cookie_app).
-behaviour(application).
%% API.
-export([start/2]).
-export([stop/1]).
%% API.
start(_Type, _Args) ->
Dispatch = [
{'_', [
{'_', toppage_handler, []}
]}
],
{ok, _} = cowboy:start_http(http, 100, [{port, 8080}], [
{dispatch, Dispatch}
]),
cookie_sup:start_link().
stop(_State) ->
ok.

View file

@ -0,0 +1,23 @@
%% Feel free to use, reuse and abuse the code in this file.
%% @private
-module(cookie_sup).
-behaviour(supervisor).
%% API.
-export([start_link/0]).
%% supervisor.
-export([init/1]).
%% API.
-spec start_link() -> {ok, pid()}.
start_link() ->
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
%% supervisor.
init([]) ->
Procs = [],
{ok, {{one_for_one, 10, 10}, Procs}}.

View file

@ -0,0 +1,29 @@
%% Feel free to use, reuse and abuse the code in this file.
%% @doc Cookie handler.
-module(toppage_handler).
-export([init/3]).
-export([handle/2]).
-export([terminate/2]).
init(_Transport, Req, []) ->
{ok, Req, undefined}.
handle(Req, State) ->
NewValue = integer_to_list(random:uniform(1000000)),
Req2 = cowboy_req:set_resp_cookie(
<<"server">>, NewValue, [{path, <<"/">>}], Req),
{ClientCookie, Req3} = cowboy_req:cookie(<<"client">>, Req2),
{ServerCookie, Req4} = cowboy_req:cookie(<<"server">>, Req3),
{ok, Body} = toppage_dtl:render([
{client, ClientCookie},
{server, ServerCookie}
]),
{ok, Req5} = cowboy_req:reply(200,
[{<<"content-type">>, <<"text/html">>}],
Body, Req4),
{ok, Req5, State}.
terminate(_Req, _State) ->
ok.

3
examples/cookie/start.sh Executable file
View file

@ -0,0 +1,3 @@
#!/bin/sh
erl -pa ebin deps/*/ebin -s cookie \
-eval "io:format(\"Point your browser at http://localhost:8080~n\")."

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Cowboy Cookie Example</title>
</head>
<body>
<h1>Cowboy Cookie Example</h1>
<p>Refresh the page to see the next cookie.</p>
<h2>Cookie Set Server-Side</h2>
<p>{{ server }}</p>
<h2>Cookie Set Client-Side</h2>
<p>{{ client }}</p>
<script type="text/javascript">
// <![CDATA[
document.cookie="client=test=";
// ]]>
</script>
</body>
</html>