我的问题是:会话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:
如果我在家中转到另一页,则cookie仍然存在。如果我转到Next Steps,cookie就会消失,但是如果勾选复选框,FB会按照设置报告cookie,但路径为'/ rlos / placs / users_carers / steps /'。有趣的是,在各个部分之间切换并选中该框会为每个路径生成一个cookie。
到目前为止,我还没有真正在我的网站中使用过Cookie,更喜欢使用PHP会话变量,但我认为设置会话cookie非常简单,因为我不会厌恶民间因为我希望cookie设置为客户端使用jQuery。我可以通过设置持久性cookie来解决这个问题,但是a)我不想在用户的机器上留下cookie,并且b)我想知道翻转是怎么回事。
可能我没有采取最好的方式,但是这个项目必须在星期二之前完成,所以我无法重做我的方法。
答案 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: '/' });