【问题标题】:Access the PHP session name in Javascript在 Javascript 中访问 PHP 会话名称
【发布时间】:2020-08-26 08:52:56
【问题描述】:

我目前正在使用它来检查浏览器中是否存在 cookie 名称:

document.cookie.indexOf('myCookie=')

如果 cookie 是通过 PHP 的 setcookie() 设置的,则此方法有效,但这似乎不适用于 PHP 会话。

例如如果“cookie”是通过session_start(); 设置的,您可以在浏览器检查器中看到“Session”到期的 cookie 名称。我似乎无法通过 JS 访问该会话 cookie 名称。有什么想法吗?

明确一点:我需要检查浏览器中是否存在 PHP 会话 cookie 名称,而不是会话数据。

【问题讨论】:

  • 我用PHP已经有一段时间了,不是会话存储到会话存储中,而不是cookie吗? $_SESSION?您需要检查会话存在的原因是什么?例如,你能在 PHP 中确定吗?
  • @Isolated 我需要检查会话 cookie 名称是否不再存在于浏览器中,以便我可以使缓存页面无效。这可能会解决我的问题here
  • @Isolated AFAIK PHP 会话不使用浏览器的 sessionStorage,它使用 cookie 存储来存储会话 ID。
  • 这当然是一个有趣的用例,如果 JavaScript 被缓存,那不会破坏目的吗?老实说,您可能会在其他问题中发现更多价值,我对 PHP 的了解现在非常有限,我不想为您指出错误的方向。
  • @Isolated JS 被缓存但 PHP cookie 没有

标签: javascript php session cookies session-cookies


【解决方案1】:

如果启用了session.cookie_httponly PHP 配置设置,则可以将 PHP 会话 cookie 设置为仅通过 HTTP 可用(即不在 JS 中)。换句话说,您需要禁用它/将其设置为 false 以便您的会话 cookie 可以在 JS 中访问。

你可以像这样检查它的值:

<?php
var_dump(ini_get('session.cookie_httponly'));

一般来说,这个设置是为security reasons启用的,所以我强烈建议质疑这样做的必要性。

【讨论】:

  • 我已启用此功能,但我认为这不能回答问题,抱歉。请澄清这如何帮助 JS 检查会话 cookie 名称是否存在?
  • 检查session.use_cookies 是否已启用。检查session.name 的值以确认您正在寻找正确的cookie 名称。如果您尝试访问托管在与 cookie 使用的主机名不同的主机名上的页面上的 cookie,请检查是否启用了 session.cookie_samesite
  • 顺便说一句,我不确定 JS 无法看到您的 PHP 会话 cookie 的任何其他原因。 document.cookie 应包括所有非 HTTP-only 的会话 cookie,前提是它们设置在托管您访问它的页面的同一域上。
  • 我启用了session.use_cookies,并且我确定会话名称,我可以看到它的浏览器检查器。 JS 只是不读取它,但它确实读取了 setcookie() cookie。
  • 经过一些测试之后,必须禁用 session.cookie_httponly 才能正常工作。我只是对你的措辞感到困惑。你可能想澄清一下,这样我才能接受这个答案。基本上,如果session.cookie_httponly被禁用,我想做的就可以实现了。
猜你喜欢
  • 2013-11-21
  • 2015-04-20
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 2015-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多