2013-01-16 47 views
3

所以我寧願不使用JS/jQuery來做這件事 - 但我似乎無法得到這個工作。在點擊時設置PHP cookie

我有一個鏈接<a href="?hideupdates=hide">Hide Updates</a>我試圖設置一個cookie。

if($_GET['hideupdates'] == 'hide'){ 
    setcookie("HideUpdates", "hide", time()+60*60*24*5, "/", $vars->networkSite); 
} 

它「有效」,但我必須單擊鏈接兩次。


從「 site.com」我可以 var_dump()餅乾,現在我點擊鏈接,進入「 site.com?hideupdates=hide」它出現 NULL

和那麼餅乾回來hide - 當我再次點擊該鏈接的cookie仍然出現NULL

然而,從「site.com?hideupdates=hide」。

我錯過了什麼嗎?或者我'有'使用JS/jQuery的?

+1

記住:超級全局變量在php之前將控制權交給您的腳本。除非您明確地將更改推送到超全球,否則它們的值不會由您的腳本中的任何操作改變。否則,這些更改只會反映在腳本運行NEXT時間的超全局變量中。 –

回答

8

setcookie不影響當前請求。要做到這一點,你還需要手動設置相關$_COOKIE變量:

setcookie("HideUpdates",$_COOKIE['HideUpdates'] = "hide", time()+60*60*24*5, "/", $vars->networkSite); 
+0

太棒了!簡單的解決方案,完美地工正是我在找什麼!我會在4米的時候接受它:) – Xhynk

1

直到它們被設置並且發送新的頁面請求之後,Cookies纔會進入。這是因爲Cookie與頁面請求一起發送,它們不會奇蹟般地出現在服務器上。

您的解決方案是在設置cookie後進行頁面刷新。

+0

我沒有意識到,但你是對的。刷新與再次單擊鏈接相同。我的印象是,在所有事情之前它會被人口聚居。 – Xhynk

3

這樣做是JS或jQuery的,因爲正如其他人說,餅乾不影響當前頁面請求的唯一途徑。

您需要jquery cookie plugin爲jQuery解決方案。 一些服務器有問題jquery.cookie.js(解決方法是重命名文件例如:jquery.cook。JS)jQuery的cookie的插件

使用

創建會話cookie:

$.cookie('the_cookie', 'the_value'); 

創建過期餅乾,從那以後7天:

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

創建到期的cookie,有效跨越整個網站:

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

讀取Cookie:

$.cookie('the_cookie'); // => "the_value" 
$.cookie('not_existing'); // => undefined 

讀取所有可用的cookie:

$.cookie(); // => { "the_cookie": "the_value", "...remaining": "cookies" } 

刪除Cookie:

// Returns true when cookie was found, false when no cookie was found... 
$.removeCookie('the_cookie'); 

//當餅乾被寫入相同的路徑...

$.removeCookie('the_cookie', { path: '/' }); 

您可以嘗試localStorage。它適用於Chrome,FF和IE9及更高版本。我們不支持IE7-10!萬歲!

IE8與localStorage存在一些問題。

腳本必須位於$(document).ready(function(){})中;

$(document).ready(function() { 
    $("#btnClick").click(function(e) { 
     e.preventDefault(); 
     localStorage.setItem('cookieName', 'cookie_value'); 
    window.href.location = "your_new_page.php"; 
    }); 


    //On the same page or other page 

    if (localStorage.getItem('cookieName')){ 
     //do here what you want 


    }else{ 
     //do something else 

    } 

});