来自JS的Cookie和PHP中的Cookie

时间:2015-10-02 09:59:18

标签: javascript php jquery cookies

我这样做:

JS:

Cookies.set(post_id + '_' + user_ip, post_id + "_" + user_ip, { expires: 1 });

PHP:

$cookie_str = $post_id.'_'.get_client_ip();
if (isset($_COOKIE[$cookie_str_]) ){
    print_r('ok exist');
}

但它不起作用...存在cookie我在Chrome开发人员工具中检查网络。 JS和PHP中的cookie之间有什么不同吗?或者我做了一些愚蠢的错误? IP始终是相同的... console.log()表单JS显示与PHP相同的IP

解答:

好的我从cookie名称和值中删除IP并开始工作: $ _COOKIE [];

无法看到Cookie,如:54_23.23.211.2

现在cookie只是一个简单的$ post_id;

但为什么" 54_23.23.211.2"没有工作,我不知道......不允许像cookie一样的饼干?

是 - http://harrybailey.com/2009/04/dots-arent-allowed-in-php-cookie-names/

PHP Cookie中不允许使用点:)

2 个答案:

答案 0 :(得分:1)

在我看来,我会使用post_id代替post_iduser_ip

我建议不使用IP地址,因为NAT路由器后面可能有多台机器共享一个IP地址,还会出现移动设备始终更改其IP地址的问题,因为它们也将连接到不同的网络。

请查看我为某人发布的帖子: https://stackoverflow.com/a/32758176/3296661

但是如果你想坚持使用这个方法,你可以试试这个:

使用str_replace()从PHP端的IP地址中删除所有点,并在JS端使用split('.').join("")。这样客户端和服务器端都将匹配。

这是因为PHP cookie中不允许使用点。

JS:

user_ip = post_id.split('.').join("");
Cookies.set(post_id + '_' + user_ip, post_id + "_" + user_ip, { expires: 1 });

<强> PHP:

$cookie_str = $post_id . str_replace(".","", get_client_ip());

if (isset($_COOKIE[$cookie_str_]) )
{
    print_r('ok exist');
}

答案 1 :(得分:0)

我不知道您的Cookie对象的源代码,但expires: 1看起来您的Cookie设置为在一秒后过期。