【问题标题】:Laravel 4 store temporary dataLaravel 4 存储临时数据
【发布时间】:2013-11-22 08:55:49
【问题描述】:

我想临时存储一系列将被下一个请求使用的数组。存储的信息包含一些敏感数据,这些数据将用于通过 ajax 调用在该页面中导航。数据因页面而异。所以,我只需要临时存储它以供用户在该页面上使用。

首先,我尝试使用缓存:Cache::put($dynamickey, $multiArray, 20); 但这会导致文件夹中出现大量“垃圾”缓存存储,即使它已过期。

所以,我尝试了会话刷新:Session::flash($dynamickey, $multiArray);。当用户仅打开 1 个网页选项卡时,此方法有效。但是如果用户打开这个网站的多个标签,它就会中断。

例如: 1.用户在tab1浏览本网站。 2. 然后,用户在 tab2 上浏览这个网站。一旦用户在 tab2 上浏览网站,tab1 的会话数据就会被删除。 3. 用户返回并浏览 tab1 内容。系统崩溃,无法正常工作。

我如何存储临时数据,一旦不再需要它就会被删除,但也适用于多个标签?

谢谢。

【问题讨论】:

  • 您能否详细说明一下应用程序的一般用途以及整个多选项卡问题?
  • 我已经详细说明了。希望你能理解。谢谢。
  • 这里的关键部分是ajax调用,你需要存储数据吗?
  • 是的,基本上。你有想法吗?

标签: php session caching laravel-4 temporary-files


【解决方案1】:

因此,在实际设置会话数据的页面上,您需要生成一个动态密钥,您也可以在进行 ajax 调用时生成该密钥。所以:

Session:put($dynamicKey, $data);

由于服务器不知道您是否打开了多个选项卡,它只会处理更多请求,因此我们需要区分 AJAX 请求和标准请求。这可以通过以下方式实现:

if (Request::ajax())
{
    if (Session::has($dynamicKey)) {
        Session::forget($dynamicKey);
        // Do your application logic
    }
}

因此,在发出 ajax 请求之前,会话不会被删除,您可以在其中重新生成该密钥,现在如果您无法从提供的数据中重新生成该密钥,那么您将无法区分两个不同的请求。因此,您需要通过某种方式将这个密钥传递给客户端,例如将其回显到一些 javascript 中。

现在 AJAX 调用可以利用此密钥并将其发送到请求中,您的服务器可以在其中获取它并找到该 选项卡的正确会话。

希望你明白这一点。

【讨论】:

  • 非常感谢您的回答,FruityP。只有一个问题:php session 是如何工作的?它是否始终存储在内存中直到过期?或者它被存储为文件并且仅在页面执行时访问。一旦页面执行完毕,它会从内存中删除吗?只是我对性能的一点担忧。
  • 会话存储在文件中,我很确定当session_start() 被调用时(Laravel 会为你做这件事),它会为该请求将你的特定会话数据加载到内存中。你不应该担心这个。如果您临时存储大量数据,则可以使用缓存执行上述相同步骤。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
  • 2014-04-12
  • 1970-01-01
  • 2013-07-28
相关资源
最近更新 更多