【发布时间】:2011-06-12 06:41:24
【问题描述】:
所以这可能与我来自uploadify 的JS 请求有关,但基本上我想做的是在uploadify JS 请求上,我想设置一个会话值。这似乎不起作用。
但是,当我发出 HTML 请求时,它确实如此。
我已经上传了我的会话密钥和值作为请求的参数传递...我需要做些什么来验证和设置会话吗?
【问题讨论】:
标签: javascript ruby-on-rails session uploadify
所以这可能与我来自uploadify 的JS 请求有关,但基本上我想做的是在uploadify JS 请求上,我想设置一个会话值。这似乎不起作用。
但是,当我发出 HTML 请求时,它确实如此。
我已经上传了我的会话密钥和值作为请求的参数传递...我需要做些什么来验证和设置会话吗?
【问题讨论】:
标签: javascript ruby-on-rails session uploadify
是的,不幸的是它有点棘手,但完全有可能。
首先,您需要一个非 cookie 存储会话。如果您使用的是 cookie 存储会话,则需要切换到数据库/memcache/redis 或类似的会话存储。
会话的正常工作方式是 rails 会为您提供一个带有会话 ID 的 cookie。当您的浏览器发出正常请求时,它会将 cookie 发送到 rails,因此 rails 会立即知道要在其数据库中查找哪个会话,找到它并将其加载到 session[]。
当您使用 uploadify 或类似技术时,请求没有随其发送的 cookie 数据,因此 rails 不知道是谁在发出请求,并使整个会话的东西根本不起作用。
因此修复它的方法是让 uploadify 将会话 ID 作为参数发送,这听起来像是您可能正在做的事情,但是您需要添加一些机架中间件。
Rack 中间件基本上是位于初始请求和 rails 之间的一层,它会查看参数,如果在正常的 http 参数中看到 session_id,它将把它变成看起来像 cookie 的东西,在它到达轨道之前。所以本质上,rails 认为它是一个拥有普通 cookie 的普通用户,然后所有会话内容开始工作,并且 rails 可以知道谁在发出请求。
网上有很多这样的例子,所以我不会重写,我只是链接:
http://railstips.org/blog/archives/2009/07/21/uploadify-and-rails23/
http://metautonomo.us/2010/07/09/uploadify-and-rails-3/
祝你好运!
【讨论】: