会话cookie受路径限制?

时间:2012-07-29 17:50:55

标签: jquery codeigniter session-cookies

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

背景是:

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

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

  • name:autoplay
  • value:on
  • 域名:sonet.nottingham.ac.uk
  • 尺寸:10 B
  • 路径:/ rlos / placs / users_carers /
  • 到期:会话

如果我在家中转到另一页,则cookie仍然存在。如果我转到Next Steps,cookie就会消失,但是如果勾选复选框,FB会按照设置报告cookie,但路径为'/ rlos / placs / users_carers / steps /'。有趣的是,在各个部分之间切换并选中该框会为每个路径生成一个cookie。

到目前为止,我还没有真正在我的网站中使用过Cookie,更喜欢使用PHP会话变量,但我认为设置会话cookie非常简单,因为我不会厌恶民间因为我希望cookie设置为客户端使用jQuery。我可以通过设置持久性cookie来解决这个问题,但是a)我不想在用户的机器上留下cookie,并且b)我想知道翻转是怎么回事。

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

1 个答案:

答案 0 :(得分: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包含一个长的随机字符串)。使用set_cookie()创建常规Cookie:

  

bool setcookie(string $ 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: '/' });