使用Rack::Session::Cookie删除当前会话

26

我感觉我在这里漏掉了什么显而易见的东西,希望一旦我发布这个问题,有人能用我所错过的谷歌搜索链接来羞辱我。

enable :sessions

get '/logout' do
  # What goes here to kill the session?
end
2个回答

45

只需使用

session.clear

销毁会话。


从 OP 的示例中可以清楚地看到(enable :sessions),他们正在使用 Sinatra 或类似的 Ruby 框架,但他们询问如何直接使用 Rack::Session::Cookie 删除会话。这个答案提供的解决方案适用于此吗,还是只适用于 Sinatra/Rails?根据 https://dev59.com/8Wkv5IYBdhLWcg3wpCXJ 的说法,#session 是 Sinatra/Rails/... 特有的方法,普通的 rack 应用程序没有它。如果这是真的,那么有人知道正确的仅限于 rack 的处理方式吗? - Redoman
对我不起作用,尝试了几次。我有一个非常简单的应用程序,使用了 enable :sessions - Ohad Perry
@jj_ 不,sinatrarails使用rack中间件。 - Jonas Fagundes

3

这取决于您如何创建会话。简单来说,您必须将会话条目设置为null。下面是一个简单的示例,演示如何创建和销毁会话。

  get '/login' do
    session[:username] = params[:username]
    "logged in as #{session[:username]}"
  end

  get '/logout' do
    old_user = session[:username]
    session[:username] = nil
    "logged out #{old_user}"
  end

您可以查看这个例子:https://gist.github.com/131401

2
嗯,我已经尝试过了,但是在“注销”后 rack.session cookie 仍然存在。 - ecoffey
@ecoffey 你确定是同一个 cookie 吗?如果使用 session.clear,它很可能会是一个新的会话,但旧会话将被销毁。将会话键设置为 nil 可能会保留原始 cookie,但不包含任何值。 - xentek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接