javascript - 使用 Javascript 基于 Cookie 的重定向

标签 javascript jquery html cookies

我正在尝试根据 cookie 的存在创建重定向。因此,当用户第一次连接到我的网站 jonathanstevens.org 时,他们会被重定向到 jonathanstevens.org/landing

代码部分:

<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>

全局.js

function create_cookie(name, value, days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime( date.getTime() + (days*24*60*60*1000) );
        expires = "; expires=" + date.toGMTString();
    }
    document.cookie = name + "=" + value + expires + "; path=/";
}

function get_cookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) === ' ') {
            c = c.substring(1, c.length);
        }
        if (c.indexOf(nameEQ) === 0) {
            return c.substring(nameEQ.length, c.length);
        }
    }
    return null;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

索引.html

<!-- redirect to landing page -->
<script>
  // Redirect to landing page if 'form_submitted' cookie does not exist
  if (get_cookie('secondvisit') === 'undefined') {
    window.location.href = "landing.html";
  }
</script>

登陆.html

<!-- Adds second Visit cookie -->
<script>
	jQuery(document).ready(function($) {
    // Create cookie so that the user is no longer redirected
    create_cookie('secondvisit', 'true', 30);
	});
</script>

预期的结果是检查 cookie,如果未定义,则将我转发到我的登陆页面。关于我做错了什么有什么想法吗?

最佳答案

当您从函数 get_cookie 返回 null 时,您应该与 null 进行比较,而不是与 undefined 进行比较。 p>

索引.html

<!-- redirect to landing page -->
<script>
  // Redirect to landing page if 'form_submitted' cookie does not exist
  if (get_cookie('secondvisit') === null) {
    window.location.href = "landing.html";
  }
</script>

除此之外,您应该使用这个 library非常好,易于使用,请参见下文

创建一个 cookie,在整个网站上有效:

Cookies.set('name', 'value');

创建一个 7 天后过期的 cookie,在整个网站上有效:

Cookies.set('name', 'value', { expires: 7 });

创建一个过期的cookie,对当前页面的路径有效:

Cookies.set('name', 'value', { expires: 7, path: '' });

读取cookie:

Cookies.get('name'); // => 'value'
Cookies.get('nothing'); // => undefined

读取所有可见的 cookie:

Cookies.get(); // => { name: 'value' }

删除cookie:

Cookies.remove('name');

删除对当前页面路径有效的cookie:

Cookies.set('name', 'value', { path: '' });
Cookies.remove('name'); // fail!
Cookies.remove('name', { path: '' }); // removed! 

编辑

使用 js.cookie 库转换后的代码版本将如下所示。

(注意:我已经测试了此代码并且它可以正常工作,请确保您正确包含库并且控制台上没有错误。)

Index.html

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
<!-- redirect to landing page -->
<script>
    $(document).ready(function () {
        if (typeof Cookies.get('secondvisit') === 'undefined') {
            window.location.href = "landing.html";
        }
    })
    // Redirect to landing page if 'form_submitted' cookie does not exist
</script>

landing.html

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>
<!-- Adds second Visit cookie -->
<script>
    jQuery(document).ready(function () {
        // Create cookie so that the user is no longer redirected
        var a = Cookies.set('secondvisit', 'true', {
            expires: 7
        });
    });
</script>

关于javascript - 使用 Javascript 基于 Cookie 的重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47686107/

相关文章:

javascript - 当用户单击按钮时,将计时器的值增加 1 分钟

javascript - 在哪里可以找到允许我禁用某些日期的 javascript 日历?

php - 由于 config.js 文件,上传到 Web 服务器后布局和功能被破坏

html - CSS中的半椭圆形

html - 单个页面上的不同导航栏 angular2

javascript - Ember 中的 RadioButtonList,将模型属性绑定(bind)到所选值

javascript - 当我来自两个不同的函数时变量未定义

javascript - 本地 html/css/javascript 元素到 UWP 应用程序中 - 图像不显示

javascript - 设置表格单元格高度和宽度时,.outerHeight 和 .outerWidth 呈指数增长

javascript - 如何保留添加到 jQuery 匹配集中的项目的顺序?