如何通过javascript或服务器代码设置cookie?

时间:2010-08-16 10:01:06

标签: php cookies

我有一些特殊的饼干。我需要那些cookie只由服务器代码设置。所以我需要找出cookie是由javascript或服务器代码设置的。有可能吗?

3 个答案:

答案 0 :(得分:3)

从技术上讲,您无法确定此信息。尝试的一种方法是使用类似sha1 / md5散列值,并使用服务器端的会话来存储相同的值并断言哈希匹配。

你能解释一下你正在尝试做些什么吗?也许某种解决方案是可能的。

答案 1 :(得分:1)

我可能迟到了,但如果您只是想知道 cookie 是通过 javascript 还是服务器端设置的,那么您可以简单地在开发工具中禁用 javascript 并查看是否设置了 cookie。如果它没有在禁用 javascript 的情况下设置,那么它很可能是通过服务器设置的。

您可以在开发控制台的首选项中禁用 javascript: (Settings > preferences > Debugger)

注意:这将解决最常见的情况,但当然,如果 cookie 是通过对通过 javascript 进行的服务器的一些 AJAX 调用设置的,那么这可能会给您误报结果

答案 2 :(得分:0)

我知道这个问题已经有将近十年了,但是我附上了我的2美分,以防万一。 ;)

正如Chris和Marc B回答的那样,您无法与创建Cookie的地方区分开。直到今天都是如此。

要解决不允许Javascript获取特定cookie的问题:您可以将cookie设置为HttpOnly,并且支持浏览器将不允许从Javascript设置cookie,这不会阻止许多方法篡改Cookie,例如“中间人”攻击,但有助于使事情变得更困难。

要在PHP中将默认会话cookie设置为HttpOnly,请确保已将其保存在php.ini文件中(并通过运行phpinfo();进行确认):

session.cookie_httponly = On

要在您的应用程序中设置HttpOnly cookie,

// Do it with
setcookie($name, $value, $expires, $path, $domain, $secure, true);

// OR
setrawcookie($name, $value, $expires, $path, $domain, $secure, true);

// OR with PHP 7.3+
setcookie($name, $value, ['httponly' => true]);

// OR with PHP 7.3+
setrawcookie($name, $value, ['httponly' => true]);

// OR by sending the raw header
//   Set-Cookie: <name>=<value>[; <Max-Age>=<age>][; expires=<date>][; domain=<domain_name>][; path=<some_path>][; Secure][; HttpOnly]
header("Set-Cookie: {$name}={$value}; HttpOnly", false);