2012-07-29 32 views
0

我的問題是:會話Cookie是否受站點路徑限制?也就是說,如果Cookie設置爲mysite.net/rodents/gerbil/是否不適用於其他路徑,如mysite.net/rodents/hamster會話cookie受路徑限制?

的背景是:

我在http://sonet.nottingham.ac.uk/rlos/placs/users_carers/home中,我想用一個cookie來讓頁面旁白自動啓動,或者沒有,當用戶進入頁面開發了一個簡單的網站。默認情況下,自動啓動功能處於關閉狀態,但如果用戶通過頂部的音頻播放器勾選複選框並轉至另一頁,則Cookie(012)會將其設置爲on,播放器autostart參數在PHP(CodeIgniter)中設置爲true

這可以在站點部分(例如Home)中正常工作,但是當用戶移動到另一部分時(例如後續步驟),根據Firebug,cookie會消失。所以,如果我在打勾家裏的複選框,然後FB報告餅乾:

  • 名稱:自動播放
  • 值:上
  • 域:sonet.nottingham.ac.uk
  • 大小:10b的
  • 路徑:/ RLOS/placs/users_carers/
  • 過期:會話

如果我去到另一個網頁首頁中的cooki e仍然存在。如果我轉到Next Steps,cookie會消失,但如果我勾選複選框FB,則會報告設置的Cookie,但路徑爲'/ rlos/placs/users_carers/steps /'。有趣的是,在部分之間切換並選中該框會爲每個路徑生成一個cookie。

我到現在爲止還沒有在我的網站中真正使用過Cookie,我更喜歡使用PHP會話變量,但我認爲設置會話Cookie很簡單,而且我不會因爲某些原因而導致我想要cookie集客戶端使用jQuery。我可以通過設置一個持久cookie來解決這個問題,但是a)我不想在用戶的機器上留下cookie,並且b)我想知道翻蓋是怎麼回事。

這可能是我沒有走過最好的方式,但這個項目必須在星期二完成,所以我不能重做我的方法。

+0

爾,以及查詢是關於cookies。無論我使用Codeigniter還是Hamsterscript作爲後端,或者jQuery或Beaverware客戶端都不相關。但是,跆拳道,我會添加更多的標籤,因爲我喜歡保持民間的快樂。簡單的問題是:會話cookie是否受路徑限制? – 2012-07-29 18:33:49

+0

不,它們不是(至少在CI中),全部取決於如何在配置文件中設置cookie設置。例如,把'/'當作路徑,你可以在你的整個一邊玩它。這是你正在解決的問題嗎? – manix 2012-07-29 22:06:13

+0

使用jQuery和jquery.cookie插件(https://github.com/carhartl/jquery-cookie)來取消/設置cookie。我只是在CI中閱讀cookie。也許這是導致問題的插件 - 我會進行調查。昨晚我太喜歡這件事了,想清楚:( – 2012-07-30 10:18:31

回答

0

這是什麼session.cookie_path指令決定:

session.cookie_pathstring
session.cookie_path指定路徑在會話cookie設置。 默認爲/。另請參閱session_get_cookie_params()session_set_cookie_params()。

但是,您的cookie被稱爲autoplay並具有on的值,所以這實際上是不是會話cookie(被稱爲默認PHPSESSID,幷包含一個長的隨機字符串)。普通餅乾與set_cookie()創建:

布爾的setcookie(字符串$名稱[,字符串$價值[摘要$到期= 0, 串$路徑 [,字符串$域[,布爾$安全=假[,布爾$僅Http =假]]]]]])

...其中:

路徑
服務器上的路徑,該路徑COO kie將會在 上提供。如果設置爲「/」,則該Cookie將在整個域中的 中可用。如果設置爲'/ foo /',則該cookie將僅在/ foo /目錄內的所有子目錄(例如/ foo/bar/ )內可用 。 默認值是在中設置Cookie 的當前目錄。

總結:你需要明確設置路徑。

編輯:我沒有注意到jQuery標籤。引用您的插件文件:

創建到期的cookie,橫跨整個站點有效:

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