Cookie未保存在OctoberCMS中

问题描述 投票:0回答:2

我正在尝试通过octobercms ajax将项目保存在cookie中,但未保存该cookie:

HTML

<button
    data-request="onSaveItem"
    data-request-data="item_id: 12345">Save item</button>

PHP

function onSaveItem() {
    $item_id = Input::get('item_id');
    Cookie::forever('saved_item', $item_id);
}

因此,当我尝试在页面开始处检索cookie时,它返回NULL

function onStart() {
    var_dump(Cookie::get('saved_item'));
}

// output: NULL
cookies octobercms
2个回答
0
投票

使用cookie也使我花了一些时间来理解。希望我为您写得足够清楚。基本上,您不会将Cookie返回浏览器以将其添加到应用程序存储中。我创建了一个示例页面,您可以看到here

第一个示例是常见的html形式。

{{ form_open({request:'onSaveItemRedirect'}) }}
    <input type="text" name="item_id" value="12345">
    <button>Save item</button>
{{ form_close() }}

此表格将帖子信息发送到onSaveItemRedirect。要注意的关键是cookie队列。这样,服务器就可以在带有重定向的标头中发送电磁炉。

function onSaveItemRedirect() {
    $item_id = Input::get('item_id');
    $cookie = Cookie::forever('saved_item', $item_id);
    Cookie::queue($cookie);
    return Redirect::refresh();
}

第二个示例使用AJAX API,但稍微复杂一些。请注意,我正在使用局部和data-request-complete方法。这将使用JavaScript函数updateCookie()更新部分代码,并在AJAX上完成新的cookie。

<h3 id="cookiePartial">{% partial 'cookie/test' %}</h3>
{{ form_ajax('onSaveItemAjax', {'complete' : 'updateCookie()' }) }}
    <input type="text" name="item_id" value="12345">
    <button>Save item</button>
{{ form_close() }}

脚本:

<script>
function updateCookie() {
    $.request('onUpdateCookiePartial', {
        update: {'cookie/test': '#cookiePartial'}
    });
}
</script>

PHP:注意,您应该返回包含cookie信息的响应。当响应返回并完成时,AJAX API将请求发送到onUpdateCookiePartial()。优良作法是在运行事件处理程序时返回一些内容。在这种情况下为true

function onSaveItemAjax() {
    $item_id = Input::get('item_id');
    $cookie = Cookie::forever('saved_item', $item_id);
    return Response::json(['Success'])->withCookie($cookie);
}

function onUpdateCookiePartial() {
    return true;
}

0
投票

我想它非常简单,因为cookie是客户端,您可以轻松地将其存储在客户端。

<button
  data-request="onSaveItem"
  data-request-data="item_id: 12345"
  data-request-success="document.cookie = 'saved_item=222; expires=Fri, 31 Dec 9999 23:59:59 GMT';"
>
  Save item
</button>

它将像永远存储Cookie一样:)

您还可以使用data-request-errordata-request-complete (both case error or success)之类的其他API属性来存储cookie。

[如有疑问请发表评论。

© www.soinside.com 2019 - 2024. All rights reserved.