Cookie 未保存在 OctoberCMS 中
Cookie not being saved in OctoberCMS
我正在尝试通过 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 时,它 returns NULL
:
function onStart() {
var_dump(Cookie::get('saved_item'));
}
// output: NULL
使用 cookie 也花了我一段时间才理解。我希望我写的对你来说足够清楚。基本上,您不会 return 将 cookie 发送到浏览器以将其添加到应用程序存储中。我创建了一个示例页面,您可以看到 here.
第一个示例是常见的 html 形式。
{{ form_open({request:'onSaveItemRedirect'}) }}
<input type="text" name="item_id" value="12345">
<button>Save item</button>
{{ form_close() }}
此表单将 post 信息发送到 onSaveItemRedirect
。需要注意的关键是 cookie queue。这允许服务器通过重定向在 header 中发送 cooker。
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()
更新部分内容,新 cookie 在 AJAX 完成。
<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:注意这里你应该return一个带有cookie信息的响应。 return 编辑并完成响应后,AJAX API 会向 onUpdateCookiePartial()
发送请求。当 运行 一个事件处理程序时,return 是个好习惯;在这种情况下 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;
}
您只需要对其进行排队,并确保之后没有退出您的 php 代码,因为 cookie 将使用响应发送回客户端。
服务器端cookie你不能从客户端读取它,你只能从服务器端访问和读取它
function onSaveItem() {
$item_id = Input::get('item_id');
Cookie::queue(Cookie::forever('saved_item', $item_id));
return Response::json(['success' => true], 200);
}
如果你只想要客户端cookie,你可以像这样使用,你不能从服务器读取它
我想这很简单,因为 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 最长时间:)
You can also use other API attributes like data-request-error
or data-request-complete (both case error or success)
to store your cookie.
如有疑问请评论。
我正在尝试通过 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 时,它 returns NULL
:
function onStart() {
var_dump(Cookie::get('saved_item'));
}
// output: NULL
使用 cookie 也花了我一段时间才理解。我希望我写的对你来说足够清楚。基本上,您不会 return 将 cookie 发送到浏览器以将其添加到应用程序存储中。我创建了一个示例页面,您可以看到 here.
第一个示例是常见的 html 形式。
{{ form_open({request:'onSaveItemRedirect'}) }}
<input type="text" name="item_id" value="12345">
<button>Save item</button>
{{ form_close() }}
此表单将 post 信息发送到 onSaveItemRedirect
。需要注意的关键是 cookie queue。这允许服务器通过重定向在 header 中发送 cooker。
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()
更新部分内容,新 cookie 在 AJAX 完成。
<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:注意这里你应该return一个带有cookie信息的响应。 return 编辑并完成响应后,AJAX API 会向 onUpdateCookiePartial()
发送请求。当 运行 一个事件处理程序时,return 是个好习惯;在这种情况下 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;
}
您只需要对其进行排队,并确保之后没有退出您的 php 代码,因为 cookie 将使用响应发送回客户端。
服务器端cookie你不能从客户端读取它,你只能从服务器端访问和读取它
function onSaveItem() {
$item_id = Input::get('item_id');
Cookie::queue(Cookie::forever('saved_item', $item_id));
return Response::json(['success' => true], 200);
}
如果你只想要客户端cookie,你可以像这样使用,你不能从服务器读取它
我想这很简单,因为 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 最长时间:)
You can also use other API attributes like
data-request-error
ordata-request-complete (both case error or success)
to store your cookie.
如有疑问请评论。