cowboy的cookie和session的例子
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的例子的更多相关文章
- 为什么你学不会递归?告别递归,谈谈我的一些经验 关于集合中一些常考的知识点总结 .net辗转java系列(一)视野 彻底理解cookie,session,token
为什么你学不会递归?告别递归,谈谈我的一些经验 可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! ...
- 【转】Cookie和Session区别和联系详解
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
- 理解Cookie和Session机制(转)
目录[-] Cookie机制 什么是Cookie 记录用户访问次数 Cookie的不可跨域名性 Unicode编码:保存中文 BASE64编码:保存二进制图片 设置Cookie的所有属性 Cookie ...
- Django实现表单验证、CSRF、cookie和session、缓存、数据库多表操作(双下划綫)
通常验证用户输入是否合法的话,是前端js和后端共同验证的,这是因为前端js是可以被禁用的,假如被禁用了,那就没法用js实现验证合法与否了,也就是即使用户输入的不合法,但是也没提示,用户也不知道怎么输入 ...
- php的cookie和session相同主域名共享
如何使用chrome查看cookie和session详见另一篇文章,点这里 首先说cookie, $cookieDomain = '.elf.com'; setcookie('elf', 'im el ...
- PHP的学习--cookie和session
最近读了一点<PHP核心技术与最佳实践>,看了cookie和session,有所收获,结合之前的认识参考了几篇博客,总结一下-- 1. PHP的COOKIE cookie 是一种在远程浏览 ...
- 转:理解Cookie和Session机制
原文: 理解Cookie和Session机制 摘要: Cookie工作原理 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份.怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论 ...
- Java——Cookie与Session
Cookie通过客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份. 1.Cookie 1.1概念及使用方法 Cookie实际上是一小段文本信息.客户端请求服务器,如果服务 ...
- 关于cookie的文章(cookie与session机制)
会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...
随机推荐
- OLT配置说明
MA5680T>enable 进入特权模式 MA5680T#config 进入配置模式 MA5680T(config)#display current-configuration sim ...
- WTH统计
SELECT t2.MasterName AS '类型',SUM(t1.DailyCount) AS '数量',(CASE T2.MasterName WHEN '电子阅读' THEN '篇' WHE ...
- 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 ...
- LeetCode OJ:Implement Stack using Queues(队列实现栈)
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...
- yii2 联系我们发送邮件报错
为什么会报错,因为国内的邮件服务商要求发送邮件的人和设置的smtp服务器账号要相同,因为联系我们的是用户,也就是发件人是用户,而不是我们配置的邮箱,所有出错. 这里我用了个取巧的办法,发件人改为自己, ...
- CUDA Samples: green ball
以下CUDA sample是分别用C++和CUDA实现的生成的绿色的球图像,并对其中使用到的CUDA函数进行了解说,code参考了<GPU高性能编程CUDA实战>一书的第五章,各个文件内容 ...
- C# parser JSON get Key and value
/*********************************************************************** * C# parser JSON get Key an ...
- times(NULL) Segmentation fault
****************************************************************************** * times(NULL) Segment ...
- .net core web 中使用app.UseRouter的几种使用方式
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory ...
- BZOJ - 3295 动态逆序对 (树状数组套treap)
题目链接 思路和bzoj2141差不多,不过这道题的数据更强一些,线段树套treapT了,树状数组套treap卡过~~ #include<bits/stdc++.h> using name ...