用JS设置cookie,用PHP读取问题

IT技术 php javascript cookies
2021-02-07 09:10:07

我正在尝试使用 javascript 设置一个 cookie,并使用 php 在另一个页面中读取它。我可以通过做来写cookie

document.cookie = cookieName+"="+cookieValue;

我部分工作。- cookie 已写入,我$_COOKIE[cookieName]只能在同一网页中读取它

这真的不太有用。我需要在另一页阅读它。我通常在 asp.net 和 c# 中开发,所以我对 php 很陌生。难道我做错了什么?

感谢您的时间!

EDIT1:两个页面都在同一个域中......例如。site.com/index.php -> site.com/index2.php

EDIT2:cookie 通过以下方式设置在一页中:

function SetCookie(cookieName,cookieValue,nDays) {
 var today = new Date();
 var expire = new Date();
 if (nDays==null || nDays==0) nDays=1;
 expire.setTime(today.getTime() + 3600000*24*nDays);
 document.cookie = cookieName+"="+escape(cookieValue)
                 + ";expires="+expire.toGMTString();
}

在另一个页面中它无法访问,但在同一页面中它可以......

EDIT3:我尝试设置域并添加path=<?php echo $_SERVER['HTTP_HOST']; ?>到 javascript 代码中......仍然没有......

EDIT4:到目前为止我有..

document.cookie = cookieName+"="+escape(cookieValue)+"; expires="+expire.toGMTString()+"; path=/"+"; domain=.<?php echo $_SERVER['HTTP_HOST']; ?>";

而且我仍然只能从同一页面读取 cookie ..

EDIT5:哦..我的..天啊......一直是一个错字......只需要删除“path=/ “+” ;dom......”我现在为自己感到羞耻...... . 同时,我也重置了我的 cookie,所以 Jared 现在我不幸地不能接受你的帖子作为 anwser...我给我的名字带来了耻辱!!!....

5个回答

在此处阅读设置 Javascript cookie,特别是路径和域访问:

http://www.quirksmode.org/js/cookies.html

我认为正在发生的事情是两件事之一:

  1. 您不是从同一个域/子域访问 cookie,和/或
  2. 另一个页面不是 cookie 指定的路径的一部分。

因此,您的 cookie 不会向浏览器提供相关信息,以便跨子域和/或目录路径访问它。

document.cookie = 'ppkcookie1=testcookie; expires=Thu, 2 Aug 2001 20:47:11 UTC; path=/; ;domain=.example.com'

请注意,.example.com这只是一个示例域(您需要在那里使用您的域),除了首字母之外,您不需要通配符,.因为它可以跨越所有子域。你需要生成一个expires=日期。来自 QuirksMode:

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

我在domain=QuirksMode 的函数中添加了这个位。

编辑(下面的示例最初引用了我个人网站上的页面。)

安德烈,这对我来说非常好:

http://example.com/test.php

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

createCookie('cookieee','stuff','22');

http://example.com/test/test.php

<pre>
<?php 

print_r($_COOKIE);

?>

打印输出$_COOKIE将显示 cookie。请注意,当我检查 cookie 时,.example.com 被正确设置为域。

Cookie 只能由在同一域上运行的代码访问。

如果您的 PHP 和 .NET 代码在不同的域上运行,则浏览器不会将域 A 的 cookie 与域 B 的请求一起发送(反之亦然)——这种同源策略的实施有助于保持网络速度(因为浏览器不必为每个请求传输用户的所有cookie,并且服务器不必解析数兆字节的无用数据来获取它感兴趣的两个字段)和安全(因为我可以劫持你的帐户)如果我有一个带有安全会话密钥的 cookie。)

@Jared 从QuirksMode发布了一个很好的链接,它提供了设置路径和域出色概述,因此您可以在您的站点中准确地获得所需的访问权限。

@Michael Jasper,不,域是指定的任何目录。如果未指定目录,则使用当前目录。
2021-03-18 09:10:07
域现在每个只能有 1 页吗?那真的很糟糕。
2021-03-25 09:10:07

你能提供更多信息吗?他们都在同一个域中只是不同的文件吗?是线

document.cookie = cookieName+"="+cookieValue;

您用于创建 cookie 的唯一行?

如果要扩展 cookie 可用的域,则需要将其指定为 cookie 的一部分:

document.cookie = cookieName + '=' + cookieValue + '; path=/;';

您需要为 cookie 设置路径。

例如在 javascript 中,如果您不指定 cookie 路径,则使用当前页面的路径进行设置。

在JS中:

用于设置 cookie:

document.cookie = "key=value; expires=Fri, 03 Aug 2018 12:00:00 UTC; path=/";

在 PHP 中:

用于设置 cookie:

setcookie('key', 'value', (time() + (3600*2)), '/');

访问:

if (isset($_COOKIE['key'])) echo $_COOKIE['key'];