0

我的问题是:会话 cookie 是否受站点路径的限制?也就是说,如果在mysite.net/rodents/gerbil/中设置了一个 cookie ,它是否不适用于另一个路径,例如mysite.net/rodents/hamster

上下文是:

我在http://sonet.nottingham.ac.uk/rlos/placs/users_carers/home开发了一个简单的站点,我想在其中使用 cookie 来允许页面旁白在用户输入时自动启动或不启动页。默认情况下自动启动是关闭的,但是如果用户勾选顶部音频播放器的复选框并转到另一个页面,则在 PHP (CodeIgniter)中将 cookieautoplay设置为on并且 playerautostart参数设置为。true

据 Firebug 称,这在站点部分(例如主页)中工作正常,但是当用户移动到另一个部分(例如下一步)时,cookie 会消失。因此,如果我勾选 Home 中的复选框,则 FB 会报告 cookie:

  • 名称:自动播放
  • 值:开
  • 域: sonet.nottingham.ac.uk
  • 尺寸:10 B
  • 路径:/rlos/placs/users_carers/
  • 过期:会话

如果我转到主页中的另一个页面,cookie 仍然存在。如果我转到下一步,cookie 就会消失,但如果我勾选复选框,FB 会报告 cookie 已设置但路径为“/rlos/placs/users_carers/steps/”。有趣的是,在各个部分之间切换并选中该框会为每个路径生成一个 cookie。

到目前为止,我还没有真正在我的网站中使用过 cookie,我更喜欢 PHP 会话变量,但我认为设置会话 cookie 很简单,出于某种原因,我不会厌烦人们,我希望使用 jQuery 设置客户端的 cookie。我可以通过设置一个持久性 cookie 来解决这个问题,但是 a) 我不想在用户的机器上留下一个 cookie,并且 b) 我想知道发生了什么翻转。

可能是我没有采取最好的方法,但是这个项目必须在星期二之前完成,所以我无法重做我的方法。

4

1 回答 1

0

这就是session.cookie_path指令所决定的:

session.cookie_path string
session.cookie_path指定在会话 cookie 中设置的路径。默认为 /。另见session_get_cookie_params()session_set_cookie_params ()。

但是,您的 cookie 被调用autoplay并具有 值on,因此它不是会话 cookie(PHPSESSID默认情况下被调用并包含一个长随机字符串)。常规 cookie 是使用set_cookie()创建的:

bool setcookie ( 字符串 $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]])

... 在哪里:

路径
cookie 可用的服务器上的路径。如果设置为“/”,cookie 将在整个域中可用。如果设置为 '/foo/',则 cookie 将仅在 /foo/ 目录和域的 /foo/bar/ 等所有子目录中可用。默认值是设置 cookie 的当前目录

总结一下:您需要明确设置路径。

编辑:我没有注意到 jQuery 标签。引用您的插件文档:

创建过期 cookie,在整个站点中有效:

$.cookie('the_cookie', 'the_value', { expires: 7, path: '/' });

于 2013-01-04T10:19:53.500 回答