session插件需要下载https://github.com/chvanikoff/cowboy_session

如果session需要分布式存储,可以参考https://github.com/spiegela/cowboy_session_storage_redis,他用的是redis,基于上面的cowboy_session做的扩展,我们如果有三方考虑的存储,完全可以自己实现分布式session处理。

创建工程

rebar-creator create-app testCowboy

testCowboy_app.erl

-module(testCowboy_app).

-behaviour(application).

-export([start/, stop/]).

-define(C_ACCEPTORS,  ).

start(_StartType, _StartArgs) ->
application:start(crypto),
application:start(cowlib),
application:start(ranch),
application:start(cowboy), application:start(gproc),
application:start(uuid),
application:start(cowboy_session),
%% 如果使用redis存session,在这里添加这个
cowboy_session_config:update_storage(cowboy_session_storage_redis), Routes = route_helper:get_routes(),
Dispatch = cowboy_router:compile(Routes),
Port = ,
TransOpts = [{port, Port}],
ProtoOpts = [{env, [{dispatch, Dispatch}]}],
cowboy:start_http(http, ?C_ACCEPTORS, TransOpts, ProtoOpts). stop(_State) ->
ok.

route_helper.erl

-module(route_helper).

-export([get_routes/]).

get_routes() ->
[
{'_', [
{"/cookie_read", cookie_read_handler, []},
{"/cookie_write", cookie_write_handler, []},
{"/session_read", session_read_handler, []},
{"/session_write", session_write_handler, []},
]}
].

cookie_read_handler.erl

-module(cookie_read_handler).

-export([init/]).
-export([handle/]).
-export([terminate/]). init(_Transport, Req, []) ->
{ok, Req, undefined}. handle(Req, State) ->
{CookieVal,_} = cowboy_req:cookie(<<"test_cookie">>, Req,<<"no cookie found">>),
{ok, Req2} = cowboy_req:reply(, [{<<"content-type">>, <<"text/html">>}],CookieVal, Req),
{ok, Req2, State}. terminate(_Reason, _Req, _State) ->
ok.

cookie_write_handler.erl

-module(cookie_write_handler).

-export([init/]).
-export([handle/]).
-export([terminate/]). init(_Transport, Req, []) ->
{ok, Req, undefined}. handle(Req, State) ->
TestCookieVal = integer_to_list(random:uniform()),
Req2 = cowboy_req:set_resp_cookie(<<"test_cookie">>, TestCookieVal, [{path, <<"/">>}], Req),
{ok, Req3} = cowboy_req:reply(, [{<<"content-type">>, <<"text/html">>}],TestCookieVal, Req2),
{ok, Req3, State}. terminate(_Reason, _Req, _State) ->
ok.

session_read_handler.erl

-module(session_read_handler).

-export([init/]).
-export([handle/]).
-export([terminate/]). init(_Transport, Req, []) ->
{ok, Req, undefined}. handle(Req, State) ->
{SessionVal, Req2} = cowboy_session:get(<<"test_session">>, <<"no session found">>,Req),
{ok, Req3} = cowboy_req:reply(, [{<<"content-type">>, <<"text/html">>}],SessionVal, Req2),
{ok, Req3, State}. terminate(_Reason, _Req, _State) ->
ok.

session_write_handler.erl

-module(session_write_handler).

-export([init/]).
-export([handle/]).
-export([terminate/]). init(_Transport, Req, []) ->
{ok, Req, undefined}. handle(Req, State) ->
TestCookieVal = integer_to_list(random:uniform()),
{ok, Req2} = cowboy_session:set(<<"test_session">>, TestCookieVal, Req),
{ok, Req3} = cowboy_req:reply(, [{<<"content-type">>, <<"text/html">>}],TestCookieVal, Req2),
{ok, Req3, State}. terminate(_Reason, _Req, _State) ->
ok.

如果测试session存redis,下载cowboy_session_storage_redis放工程编译即可。

cowboy的cookie和session的例子的更多相关文章

  1. 为什么你学不会递归?告别递归,谈谈我的一些经验 关于集合中一些常考的知识点总结 .net辗转java系列(一)视野 彻底理解cookie,session,token

    为什么你学不会递归?告别递归,谈谈我的一些经验   可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! ...

  2. 【转】Cookie和Session区别和联系详解

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

  3. 理解Cookie和Session机制(转)

    目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...

  4. Django实现表单验证、CSRF、cookie和session、缓存、数据库多表操作(双下划綫)

    通常验证用户输入是否合法的话,是前端js和后端共同验证的,这是因为前端js是可以被禁用的,假如被禁用了,那就没法用js实现验证合法与否了,也就是即使用户输入的不合法,但是也没提示,用户也不知道怎么输入 ...

  5. php的cookie和session相同主域名共享

    如何使用chrome查看cookie和session详见另一篇文章,点这里 首先说cookie, $cookieDomain = '.elf.com'; setcookie('elf', 'im el ...

  6. PHP的学习--cookie和session

    最近读了一点<PHP核心技术与最佳实践>,看了cookie和session,有所收获,结合之前的认识参考了几篇博客,总结一下-- 1. PHP的COOKIE cookie 是一种在远程浏览 ...

  7. 转:理解Cookie和Session机制

    原文: 理解Cookie和Session机制 摘要: Cookie工作原理 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份.怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论 ...

  8. Java——Cookie与Session

    Cookie通过客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 1.Cookie  1.1概念及使用方法 Cookie实际上是一小段文本信息.客户端请求服务器,如果服务 ...

  9. 关于cookie的文章(cookie与session机制)

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

随机推荐

  1. OLT配置说明

    MA5680T>enable  进入特权模式   MA5680T#config  进入配置模式 MA5680T(config)#display current-configuration sim ...

  2. WTH统计

    SELECT t2.MasterName AS '类型',SUM(t1.DailyCount) AS '数量',(CASE T2.MasterName WHEN '电子阅读' THEN '篇' WHE ...

  3. LeetCode OJ:Remove Duplicates from Sorted List II(链表去重II)

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

  4. LeetCode OJ:Implement Stack using Queues(队列实现栈)

    Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...

  5. yii2 联系我们发送邮件报错

    为什么会报错,因为国内的邮件服务商要求发送邮件的人和设置的smtp服务器账号要相同,因为联系我们的是用户,也就是发件人是用户,而不是我们配置的邮箱,所有出错. 这里我用了个取巧的办法,发件人改为自己, ...

  6. CUDA Samples: green ball

    以下CUDA sample是分别用C++和CUDA实现的生成的绿色的球图像,并对其中使用到的CUDA函数进行了解说,code参考了<GPU高性能编程CUDA实战>一书的第五章,各个文件内容 ...

  7. C# parser JSON get Key and value

    /*********************************************************************** * C# parser JSON get Key an ...

  8. times(NULL) Segmentation fault

    ****************************************************************************** * times(NULL) Segment ...

  9. .net core web 中使用app.UseRouter的几种使用方式

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory ...

  10. BZOJ - 3295 动态逆序对 (树状数组套treap)

    题目链接 思路和bzoj2141差不多,不过这道题的数据更强一些,线段树套treapT了,树状数组套treap卡过~~ #include<bits/stdc++.h> using name ...