У вас есть опечатка в вашем post
маршруте:
session["value"] == @cal
# ^^ compares for equality, does not set.
Это не повлияет на сеанс, а только оценивает либо true
, либо (более вероятно) false
.
Какой тип объекта @cal
, и что вы используете для поддержки вашего сеанса?(Разрешены ли эти сеансы с поддержкой cookie, например Rack::Session::Cookie
, через enable :sessions
? Если это так, можно ли сериализовать ваш объект через маршала?)
Редактировать
Да, если вы исправите эту опечатку, то у вас должно получиться.
Вот тестовое приложение, которое работает для меня ...
require 'sinatra'
enable :sessions
get('/'){ haml :show_and_go }
post '/' do
session["foo"] = [[[1,2],[3,4]],[5,6]]
"Now get it!\n"
end
__END__
@@show_and_go
%p= session["foo"].inspect
%form(method='post' action='/')
%button go
... и вот его тестирование в действии.Мы видим, что при отсутствии файлов cookie вы не получаете сеанса, но как только файл cookie был записан, сработает следующий запрос.Это также работает в браузере:
phrogz$ cat cookies.txt
cat: cookies.txt: No such file or directory
phrogz$ curl http://localhost:4567/ # GET
<p>nil</p>
<form action='/' method='post'>
<button>go</button>
</form>
phrogz$ curl -d "" -c cookies.txt http://localhost:4567 # POST
Now get it!
phrogz$ curl -b cookies.txt http://localhost:4567 # GET, with cookies
<p>[[[1, 2], [3, 4]], [5, 6]]</p>
<form action='/' method='post'>
<button>go</button>
</form>