【问题标题】:Cookie not set by .htaccess on first load首次加载时 .htaccess 未设置 Cookie
【发布时间】:2020-04-24 19:41:13
【问题描述】:

我有一个名为 /weblog 的目录。

当您第一次在浏览器栏中输入 url(即:my-site/weblog)时,该目录应重定向到 index2.html 并应设置 cookie。

这就是我的 .htaccess 的样子:

 <IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /weblog
 RewriteRule ^(.*)$ /index2.html?title=$1 [CO=title:$1&weblog:.my-site.nl:0:/]
 </IfModule>

这实际上非常有效。当您第一次访问该 url 时,它会被重定向到正确的新 url。没有问题。

但由于某种原因,在您第一次访问该 url 时没有设置 cookie:

let cookie = getCookie(); // returns undefined

奇怪的是,它确实会在您重新加载页面后设置。但我第一次真的需要cookie,因为我用它来加载内容。

可能出了什么问题,我该如何解决?

【问题讨论】:

    标签: javascript .htaccess


    【解决方案1】:

    在这里进行更多挖掘后,部分找到了我的答案: Cookie not set until a second refresh

    显然,在第一次加载页面时无法访问 cookie。您需要重新加载才能做到这一点。

    解决方法:放弃 cookie。

    我现在使用 .htaccess 向 url 添加一些参数(例如/index2.html?title=$1)。使用window.location.href,我从浏览器中检索 url,获取参数:

    let url_string = window.location.href;
    let url = new URL(url_string);
    var title = url.searchParams.get('title');
    // do stuff with title
    

    并在 History API 中使用它来将 url 改回原来的形式。类似于:history.pushState(data, null, url_string)

    它解决了我的问题,但我不喜欢它在浏览器栏中显示带有参数的 url 的方式。哪怕只是一秒钟。

    有没有办法从 .htaccess 中检索这些“水下”参数(访问者不可见)?

    【讨论】:

      猜你喜欢
      • 2014-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 2018-10-24
      相关资源
      最近更新 更多