【发布时间】:2012-12-18 02:50:48
【问题描述】:
我正在使用 Sinatra 框架制作一个非常简单的 Web 应用程序,该应用程序需要登录会话。
我可以正常登录,但是当我的朋友访问该站点时,他们以我的身份登录。我有一个朋友注册。当我重新访问该网站时,我以她的身份登录!我们在不同的设备上相距 3000 英里。
这是我的登录代码的要点..
require 'rubygems'
require 'sinatra'
# I have tried enabling/disabling the :session_secret
# set :session_secret, 'my_secret'
enable :sessions
before '*' do
begin
User.login(User.find(session[:me])) if session[:me]
end
end
post '/login' do
user = User.find_by_email!(params[:email]).authenticate!(params[:password])
session[:me] = user.id
User.login user
200
end
我也尝试将它添加到我的机架文件中
use Rack::Session::Cookie,
:key => 'my_app_key',
:path => '/',
:expire_after => 14400, # seconds
:secret => 'secret_stuff'
问题在于生产和开发环境。
Sinatra 文档不推荐任何超出enable :sessions 的配置
http://www.sinatrarb.com/faq.html#sessions
【问题讨论】:
-
User.login是什么样的? -
def login(user); @@me = user; end真的没什么兴趣 -
这是主要的兴趣...
@@me是一个类变量,它在类中保留它的值,并且具有跨越多个请求的生命周期 i>...所以这可能是你的问题。
标签: ruby session web-applications sinatra