Javascript 三方饼干
我正在创建一个带有3个按钮的弹出窗口!每个按钮都需要设置一个cookie,但过期时间/日期不同。我使用的是Javascript 三方饼干,javascript,jquery,cookies,Javascript,Jquery,Cookies,我正在创建一个带有3个按钮的弹出窗口!每个按钮都需要设置一个cookie,但过期时间/日期不同。我使用的是jquery.cookie 1按钮更像是会话cookie。因此,当单击此按钮时,弹出窗口需要消失,并在我启动新的浏览器屏幕时再次显示。所以当我在同一个浏览器窗口和同一个网站中打开一个页面时,情况就不同了 1个按钮用于“不再显示弹出窗口”,将cookie设置为7天 1 cookie在AJAX成功函数中设置,并设置为365天 我无法正确设置不同的到期时间。例如,当我用会话cookie单击按钮
jquery.cookie
- 1按钮更像是会话cookie。因此,当单击此按钮时,弹出窗口需要消失,并在我启动新的浏览器屏幕时再次显示。所以当我在同一个浏览器窗口和同一个网站中打开一个页面时,情况就不同了
- 1个按钮用于“不再显示弹出窗口”,将cookie设置为7天
- 1 cookie在AJAX成功函数中设置,并设置为365天
$(document).ready(function(){
var my_cookie = $.cookie('regNewsletter');
if (!my_cookie) {
setTimeout(function(){
$('#newsletter').modal('show');
}, 1000);
}
$(".close--btn").on("click", function () {
$.cookie('regNewsletter', true, {
path: '/',
domain: ''
});
});
$(".dismiss--btn").on("click", function () {
$.cookie('regNewsletter', true, {
path: '/',
domain: '',
expires: 7
});
});
console.log(my_cookie);
// code for removing cookie when session ends //
window.onbeforeunload = function() {
$.removeCookie('regNewsletter', { path: '/', domain: '' });
};
$("#newsletter .btn").click(function(e){
e.preventDefault();
$.ajax({
...
success: function(txt, status, xhr){
// some code //
$.cookie('regNewsletter', true, {
path: '/',
expires: 365
});
// etc etc //
});
jquery cookie:不再维护,被JS cookie取代:
使用js cookie
$(document).ready(function(){
var my_cookie = Cookies.get('regNewsletter');
if (!my_cookie) {
setTimeout(function(){
// $('#newsletter').modal('show');
}, 1000);
}
$(".close--btn").on("click", function () {
Cookies.set('regNewsletter', true, { path: '' });
});
$(".dismiss--btn").on("click", function () {
Cookies.set('regNewsletter', true, { expires: 7, path: '' });
});
//console.log(my_cookie);
$("#newsletter .btn").click(function(e){
e.preventDefault();
$.ajax({
method: "POST",
url: ".....",
data: YourData
}).done(function( msg ) {
Cookies.set('regNewsletter', true, { expires: 365, path: '' });
});
});
});
您可以使用浏览器开发工具检查cookie。 在GoogleChrome中,F12->Resources位于顶部(新打开的框架),Cookie位于左侧 我认为问题可能是您没有为这些cookie设置正确的
域
更新:另一个可疑的事情是,您删除了窗口unolad上的cookie:
window.onbeforeunload = function() {
$.removeCookie('regNewsletter', { path: '/', domain: '' });
};
您可以将其设置为7天或365天,但它会在窗口卸载时被删除,因为此处没有3个cookie,它是同一个cookie“regNewsletter”,配置了不同的参数
每次设置它时,它都会覆盖以前的值(这可能是您想要的)。
但看起来你不应该移除它
更新2:不要删除它,尽量不带过期日期,因为它应该在用户关闭浏览器时自动清除。根据您的描述,它应该比在卸载之前的中删除它更好
为什么您有这段代码
// code for removing cookie when session ends //
window.onbeforeunload = function() {
$.removeCookie('regNewsletter', { path: '/', domain: '' });
};
从你的问题中不清楚是什么情况导致了你所看到的问题,但我怀疑这是问题的一部分,如果不是全部的话
会话cookie的要点是,它将在浏览器关闭时自动删除。无需手动将其删除
当您关闭选项卡、窗口或导航到其他页面时,这段代码将立即删除cookie。因此,如果您正在执行这些操作,然后在同一浏览器会话中重新打开页面,您将看到所看到的行为,因为cookie不再存在
显然,出于同样的原因,7天和365天到期也被忽略
删除这段代码,然后cookie应保持适当的长度要设置会话cookie,您不需要在卸载之前将其删除,只需设置一个没有过期设置的cookie即可。如果默认设置为OK,您也不需要设置域,即当前网页的域
html:
关闭
解雇
AJAX
您的代码只有几个问题:
- 您可以使用域的默认值
- 您不需要onbeforeunload方法来删除会话
饼干
- 如果存在cookie,则无需设置侦听器
好的,明白了,好像有用!!我认为在卸载时删除in将使其成为会话cookie:(您能确认其余代码是否正确吗?我刚刚测试了它,但我只想确保:)它看起来不错,不过您是在本地测试它吗?cookie的空白域通常意味着localhost,因此它可能无法在实时服务器上工作。如果正确,则可以,如果不正确,则将其设置为“”.+window.location.hostname.replace(/^www./,“”)
,这样页面的域就可以访问它,不包括任何“www”前缀和子域。
$(document).ready(function(){
var my_cookie = $.cookie('regNewsletter');
if (my_cookie && my_cookie=="true") {
alert("Cookie found");
} else {
setTimeout(function(){
//$('#newsletter').modal('show');
alert("Popup newsletter");
}, 1000);
}
$(".close--btn").on("click", function () {
// set a session cookie. It'll be automatically deleted
// when the browser is closed
$.cookie('regNewsletter', 'true', {
path: '/'
});
alert("session cookie set");
});
$(".dismiss--btn").on("click", function () {
$.cookie('regNewsletter', 'true', {
path: '/',
expires: 7
});
alert("cookie set for 7 days");
});
console.log(my_cookie);
$("#newsletter .btn").click(function(e){
e.preventDefault();
$.ajax({
url:"setcookie.html",
success: function(txt, status, xhr){
$.cookie('regNewsletter', 'true', {
path: '/',
expires: 365
});
alert("cookie set for 365 days");
}
});
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="jquery.cookie.js"></script>
<button class="close--btn">close</button>
<button class="dismiss--btn">dismiss</button>
<span id="newsletter"><button class="btn">ajax</button></span>
var my_cookie = $.cookie('regNewsletter');
if (!my_cookie) {
setTimeout(function() {
$('#newsletter').modal('show');
}, 1000);
// 365 days cookie
$("#newsletter .btn").click(function(e) {
e.preventDefault();
$.cookie('regNewsletter', true, {
path: '/',
expires: 365
});
});
// Session cookie
$(".close--btn").on("click", function() {
$.cookie('regNewsletter', true, {
path: '/'
});
});
// 7 days cookie
$(".dismiss--btn").on("click", function() {
$.cookie('regNewsletter', true, {
path: '/',
expires: 7
});
});
}