【问题标题】:creating session keys on javascript requests在 javascript 请求上创建会话密钥
【发布时间】:2011-06-12 06:41:24
【问题描述】:

所以这可能与我来自uploadify 的JS 请求有关,但基本上我想做的是在uploadify JS 请求上,我想设置一个会话值。这似乎不起作用。

但是,当我发出 HTML 请求时,它确实如此。

我已经上传了我的会话密钥和值作为请求的参数传递...我需要做些什么来验证和设置会话吗?

【问题讨论】:

    标签: javascript ruby-on-rails session uploadify


    【解决方案1】:

    是的,不幸的是它有点棘手,但完全有可能。

    首先,您需要一个非 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/

    祝你好运!

    【讨论】:

    • 所以我已经按照示例设置了中间件,并且一直在生成正确的会话信息,但是为什么这不适用于使用 cookie 存储会话?如果中间件正在生成一个有效的 cookie,那么任何会话存储方法都不会起作用吗?甚至看起来所有示例都在使用 cookie 存储会话。
    • 也许有一些方法可以让它与 cookie 存储一起使用,但我对它为什么不起作用的理解是,在 cookie 存储中,客户端(浏览器)将所有会话数据发送到服务器(当然编码)每个请求。没有办法让uploadify 完成我所知道的这一点。而对于数据库会话,客户端只发送会话 ID,服务器负责在其末端查找会话数据。
    • hmm... 唯一存储的 cookie 数据是会话键/值,并且作为参数从 uploadify 传入。中间件将其设置为应有的 cookie。除了会话数据,还需要哪些其他数据?
    猜你喜欢
    • 2016-05-21
    • 2020-07-13
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多