【问题标题】:how to read php cookies with javascript correctly如何使用 javascript 正确读取 php cookie
【发布时间】:2016-02-16 21:13:26
【问题描述】:

考虑一下这个 php 和 javascript 代码:

<?php $_COOKIE['test']='123'; ?>
<script>console.log(document.cookie);</script>

然后我在控制台中看到的是: __utma=111872281.291759993.1444771465.1445374822.1445436904.4; __utmz=111872281.1444771465.1.1.utmcsr=(直接)|utmccn=(直接)|utmcmd=(无); PHPSESSID=8572f606897b1732c31a25dee29ca077

我想在 javascript 中使用 $_COOKIE['test'] 的值...但是这个奇怪的字符串对我没有用。我该怎么做?

【问题讨论】:

  • 查看关于设置 cookie 值的 PHP 手册:php.net/manual/en/function.setcookie.php 全局 cookie 集合让您可以访问当前的 cookie,它不允许您在客户端上放置新的 cookie。
  • 那么有人如何劫持cookies? @krisOye
  • 另外,要获取特定的 cookie 值,请尝试在浏览器中使用 getCookie() 方法。
  • 不知道你所说的劫持 cookie 是什么意思。 Cookie 是特定于域的,因此您的网站无法访问 mybank.com 丢弃的 cookie。如果有人在观察您的网络活动,他们可能会窃取您的 cookie 并将它们重放回服务器,但希望服务器足够聪明,能够意识到它们已被发布给不同的客户端。
  • @krisOye 我的意思是如果我将我的 cookie 更改为那个奇怪的字符串,我可以以管理员身份登录吗(例如)?

标签: javascript php cookies


【解决方案1】:
<?php
$cookie_name = "test";
$cookie_value = "123";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
?>

你需要这样写你的php代码

如果你想要特定的 cookie,你可以使用这个脚本

<script>
function getCookie(cname) {
    var name = cname + "=";
    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);
        if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
    }
    return "";
}

console.log(getCookie('test'));
<script>

【讨论】:

  • 您仍然会使用这种方法取回所有 cookie,而不是您的单个“测试”cookie。
  • 啊,奇怪,我认为这是一个跨浏览器功能。太真实了。
猜你喜欢
  • 2010-11-24
  • 1970-01-01
  • 2012-04-18
  • 2014-04-19
  • 1970-01-01
  • 2015-07-13
  • 2018-05-27
  • 2011-12-25
  • 1970-01-01
相关资源
最近更新 更多